自定义异常类,
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'
但是当用CustomFileException
或FileNotFoundError
替换Exception
时,它会捕获异常并输出为
[Errno 2] No such file or directory: 'xyx'
100
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
没什么意义,但你可以实现与你的特定程序相关的全新例外,例如UserPermissionsInsufficientError
或CoordinatesOutOfBoundsError
或你特定领域中有意义的任何事情。
你的CustomFileExcetion
是FileNotFoundError
的子类;你的代码抛出后者,后者只能被同一个类或它的父类或超类捕获。您不能通过其子类捕获异常。
为了达到您的目的,您需要提高自定义异常然后捕获它。像@deceze这样的东西写道。