簡體   English   中英

自定義異常處理如何工作,Python?

[英]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'

但是,當用FileNotFoundErrorException替換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幾乎沒有意義,但是您可以實現與特定程序相關的全新異常,例如UserPermissionsInsufficientErrorCoordinatesOutOfBoundsError或在您特定域中有意義的任何異常。

您的CustomFileExcetionFileNotFoundError的子類; 您的代碼將拋出后者,后者只能由相同的類或其父類或超類捕獲。 您不能通過其子類捕獲異常。

為了實現您的目的,您需要引發自定義例外,然后捕獲它。 像@deceze這樣寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM