首頁 > 後端開發 > Python教學 > 如何在 Python 中有效引發異常?

如何在 Python 中有效引發異常?

Susan Sarandon
發布: 2024-12-15 17:26:19
原創
321 人瀏覽過

How Do I Effectively Raise Exceptions in Python?

在 Python 中引發異常

在 Python 中,異常是在程式執行期間​​發出錯誤或異常情況訊號的一種方式。若要手動引發異常,請使用 raise 語句。

手動引發異常

要引發異常,請使用最能描述您的問題的特定 Exception 類別的建構子。例如:

raise ValueError('A very specific bad thing happened.')
登入後複製

這允許您提供自訂的錯誤訊息,從而更容易識別罪魁禍首。

避免一般異常

避免引發一般異常類似異常的異常。這些變得很難捕獲,因為您還必須捕獲所有子類化的、更具體的異常。

最佳實務:raise 語句

將 raise 語句與最具體的異常建構子一起使用,適合你的情況。您也可以將參數傳遞給建構子:

raise ValueError('A very specific bad thing happened', 'foo', 'bar', 'baz')
登入後複製

可以使用 Exception 物件的 args 屬性來擷取這些參數。

最佳實務: except 子句

處理異常時,您可能需要記錄特定錯誤並重新引發它們。使用裸提升語句保留堆疊追蹤:

logger = logging.getLogger(__name__)

try:
    do_something_in_app_that_breaks_easily()
except AppError as error:
    logger.error(error)
    raise  # just this!
    # raise AppError  # Don't do this, you'll lose the stack trace!
登入後複製

修改錯誤:謹慎操作

雖然可以使用 sys.exc_info() 修改錯誤,但偏好裸提升來保留堆疊追蹤。使用執行緒時,這可能會特別成問題,因為您可能會捕獲錯誤的回溯。

異常連結(僅限 Python 3)

在 Python 3 中,您可以連結異常以保留回溯:

raise RuntimeError('specific message') from error
登入後複製

已棄用的方法

避免以下方法,因為它們可以默默地捕捉和隱藏錯誤或甚至默默地引發錯誤的異常:

raise ValueError, 'message'  # Deprecated
raise 'message'  # Seriously wrong, don't do this
登入後複製

用法範例

針對不正確的API使用引發異常的範例:

def api_func(foo):
    '''foo should be either 'baz' or 'bar'. returns something very useful.'''
    if foo not in _ALLOWED_ARGS:
        raise ValueError('{foo} wrong, use "baz" or "bar"'.format(foo=repr(foo)))
登入後複製

建立自訂錯誤類型

您可以定義自訂錯誤類型來指示特定的應用程式相關錯誤:

class MyAppLookupError(LookupError):
    '''raise this when there's a lookup error for my app'''
登入後複製

以上是如何在 Python 中有效引發異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板