自定义异常处理如何工作,Python?

问题描述 投票:-1回答:2

自定义异常类,

class CustomFileExcetion(FileNotFoundError):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print(*args, **kwargs)

使用自定义异常,

def oppen_file(file_path):
    try:
        open('xyx')
    except CustomFileExcetion as exp:
        print(exp)

    print('100')

我试图进行自定义异常,但事实是它不捕获我的异常,它抛出异常

异常提升,

Traceback (most recent call last):
  File "C:/Users/mario/file_exception.py", line 14, in <module>
    open('xyx')
FileNotFoundError: [Errno 2] No such file or directory: 'xyx'

但是当用CustomFileExceptionFileNotFoundError替换Exception时,它会捕获异常并输出为

[Errno 2] No such file or directory: 'xyx'
100
python python-3.x exception
2个回答
3
投票

open提出了一个FileNotFoundError。这就是它的作用,你无法改变它。

你正在用一个新的子类扩展FileNotFoundError。该子类是一个比FileNotFoundError更具体的类。如果您正在捕获更具体的子类,那么它将与更通用的父类不匹配。即,except CustomFileExcetion [原文]不会抓住FileNotFoundError

如果您想使用自己的自定义例外,则必须自己提高它们。例如。你可以使你的oppen_file [sic]函数使用该自定义异常:

def oppen_file(file_path):
    try:
        open(file_path)
    except FileNotFoundError as e:
        raise CustomFileExcetion from e

现在oppen_file的每个来电者都可以使用CustomFileExcetion

try:
    oppen_file(path)
except CustomFileExcetion:
    ...

通常,您将为自己的业务逻辑实现自己的自定义异常;即复制/扩展/定制FileNotFoundError没什么意义,但你可以实现与你的特定程序相关的全新例外,例如UserPermissionsInsufficientErrorCoordinatesOutOfBoundsError或你特定领域中有意义的任何事情。


0
投票

你的CustomFileExcetionFileNotFoundError的子类;你的代码抛出后者,后者只能被同一个类或它的父类或超类捕获。您不能通过其子类捕获异常。

为了达到您的目的,您需要提高自定义异常然后捕获它。像@deceze这样的东西写道。

© www.soinside.com 2019 - 2024. All rights reserved.