在 Python 中,異常是在程式執行期間發出錯誤或異常情況訊號的一種方式。若要手動引發異常,請使用 raise 語句。
要引發異常,請使用最能描述您的問題的特定 Exception 類別的建構子。例如:
raise ValueError('A very specific bad thing happened.')
這允許您提供自訂的錯誤訊息,從而更容易識別罪魁禍首。
避免引發一般異常類似異常的異常。這些變得很難捕獲,因為您還必須捕獲所有子類化的、更具體的異常。
將 raise 語句與最具體的異常建構子一起使用,適合你的情況。您也可以將參數傳遞給建構子:
raise ValueError('A very specific bad thing happened', 'foo', 'bar', 'baz')
可以使用 Exception 物件的 args 屬性來擷取這些參數。
處理異常時,您可能需要記錄特定錯誤並重新引發它們。使用裸提升語句保留堆疊追蹤:
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 中,您可以連結異常以保留回溯:
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中文網其他相關文章!