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

2024-09-25 04:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

自定义异常类

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'

但是当用FileNotFoundErrorException替换CustomFileException时,它捕获异常并输出为

[Errno 2] No such file or directory: 'xyx'
100

Tags: ornoinitdefargsopendirectorykwargs
2条回答

open引发FileNotFoundError。它就是这么做的,你不能改变。你知道吗

您正在用一个新的子类扩展FileNotFoundError。这个子类是一个比FileNotFoundError更具体的类。如果捕获的是更具体的子类,则与更通用的父类不匹配。也就是说,except CustomFileExcetion[sic]不会捕获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或任何在特定域中有意义的异常。你知道吗

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

为了达到您的目的,您需要引发自定义异常,然后捕获它。 就像@deceze写的那样。你知道吗

相关问题 更多 >