[英]How does custom exception handling works, 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'
但是,當用FileNotFoundError
或Exception
替換CustomFileException
時,它將捕獲異常並將其輸出為
[Errno 2] No such file or directory: 'xyx'
100
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
調用者oppen_file
可以使用CustomFileExcetion
:
try:
oppen_file(path)
except CustomFileExcetion:
...
通常,您將為自己的業務邏輯實現自己的自定義異常。 即復制/擴展/自定義FileNotFoundError
幾乎沒有意義,但是您可以實現與特定程序相關的全新異常,例如UserPermissionsInsufficientError
或CoordinatesOutOfBoundsError
或在您特定域中有意義的任何異常。
您的CustomFileExcetion
是FileNotFoundError
的子類; 您的代碼將拋出后者,后者只能由相同的類或其父類或超類捕獲。 您不能通過其子類捕獲異常。
為了實現您的目的,您需要引發自定義例外,然后捕獲它。 像@deceze這樣寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.