自定义异常类
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'
但是当用FileNotFoundError
或Exception
替换CustomFileException
时,它捕获异常并输出为
[Errno 2] No such file or directory: 'xyx'
100
open
引发FileNotFoundError
。它就是这么做的,你不能改变。你知道吗您正在用一个新的子类扩展
FileNotFoundError
。这个子类是一个比FileNotFoundError
更具体的类。如果捕获的是更具体的子类,则与更通用的父类不匹配。也就是说,except CustomFileExcetion
[sic]不会捕获FileNotFoundError
。你知道吗如果您想使用自己的自定义异常,则必须自己提出它们。例如,您可以使用
oppen_file
[sic]函数来使用该自定义异常:现在,
oppen_file
的每个调用者都可以使用CustomFileExcetion
:通常,您会为自己的业务逻辑实现自己的自定义异常;也就是说,复制/扩展/自定义
FileNotFoundError
没有什么意义,但是您可以实现与特定程序相关的全新异常,例如UserPermissionsInsufficientError
或CoordinatesOutOfBoundsError
或任何在特定域中有意义的异常。你知道吗你的
CustomFileExcetion
是FileNotFoundError
的一个子类;你的代码抛出了后者,后者只能被同一个类或者它的父类或者超类捕获。不能通过子类捕获异常。你知道吗为了达到您的目的,您需要引发自定义异常,然后捕获它。 就像@deceze写的那样。你知道吗
相关问题 更多 >
编程相关推荐