970 次瀏覽
如果 Python 程式碼丟擲異常,我們可以捕獲它並列印型別、錯誤訊息、回溯以及獲取諸如檔名和行號之類的資訊,這些資訊位於發生異常的 Python 指令碼中。我們可以找到錯誤的型別、值、回溯引數。型別給出發生的異常型別;值包含錯誤訊息;回溯包含堆疊快照和許多其他關於錯誤訊息的詳細資訊。sys.exc_info() 函式返回這三個屬性的元組,raise 語句有一種接受這三個部分的三引數形式。在示例中獲取異常型別、檔案編號和行號…… 閱讀更多
173 次瀏覽
是的,在給定的程式碼中,“err”是一個異常物件。在 Python 中,一切都是物件。每個物件都有屬性和方法。因此,異常就像列表、函式、元組等也是物件。所以異常也像其他物件一樣有屬性。這些屬性可以按如下方式設定和訪問。有一個基類異常,幾乎所有其他異常都是它的子類。如果 e 是一個異常物件,則 e.args 和 e.message 是它的屬性。在當前的 Python 實現中,異常由三個部分組成:型別、值和回溯。sys 模組描述了當前的異常…… 閱讀更多
168 次瀏覽
我們有一個場景,其中 except 子句中的程式碼本身會引發異常。在給定的程式碼中,我們可以如下處理 except 子句引發的異常。示例 import sys try: a = john except: try: 4/0 except: print sys.exc_info() 輸出 我們得到以下輸出 "C:/Users/TutorialsPoint1/~.py" (, ZeroDivisionError('integer division or modulo by zero',), )
2K+ 次瀏覽
Python 異常訊息可以透過以下兩個程式碼示例中所示的不同方式捕獲和列印。在第一個示例中,我們使用異常物件的 message 屬性。示例 try: a = 7/0 print float(a) except BaseException as e: print e.message 輸出 integer division or modulo by zero 在給定程式碼的情況下,我們匯入 sys 模組並使用 sys.exc_value 屬性來捕獲和列印異常訊息。示例 import sys def catchEverything(): try: a = 'sequel' b = 0.8 print a + b except Exception as e: print sys.exc_value catchEverything() 輸出 cannot concatenate 'str' and 'float' objects
120 次瀏覽
我們看到大多數異常的名稱以單詞“error”結尾,這表明它們是錯誤,這本身就是異常的含義。從狹義上講,錯誤指的是 Python 中的語法錯誤,而執行時發生的錯誤稱為異常。眾所周知,類名中不包含“class”;類似地,變數名也不以“variable”結尾,依此類推。因此,沒有必要讓異常的名稱以“exception”結尾。考慮一下;並非所有異常都是錯誤。SystemExit、KeyboardInterrupt、StopIteration、GeneratorExit 都是異常,而不是…… 閱讀更多
165 次瀏覽
為了覆蓋某些內容或向異常傳遞額外的引數,我們在現代 Python 中這樣做:class ValidationError(Exception): def __init__(self, message, errors): super(ValidationError, self).__init__(message) self.errors = errors 透過這種方式,我們可以將錯誤訊息字典傳遞給第二個引數,並在以後需要時訪問它。
348 次瀏覽
我們匯入 logging 模組,然後使用 logging.exception 方法建立 Python 異常的日誌。示例 import logging try: print 'toy' + 6 except Exception as e: logging.exception("這是一個異常日誌") 輸出 我們得到以下輸出 ERROR:root:這是一個異常日誌 Traceback (most recent call last): File "C:/Users/TutorialsPoint1/PycharmProjects/TProg/Exception handling/loggingerror1.py", line 3, in print 'toy' + 6 TypeError: cannot concatenate 'str' and 'int' objects 需要注意的是,在 Python 3 中,我們必須只在 except 部分中呼叫 logging.exception 方法。如果我們在任何其他地方呼叫此方法,我們可能會根據警報得到一個奇怪的異常…… 閱讀更多
193 次瀏覽
我們使用最適合我們特定問題的最具體的異常建構函式,而不是引發通用異常。要捕獲我們特定的異常,我們必須捕獲所有其他作為其子類的更具體的異常。我們應該引發具體的異常並處理相同的具體異常。要引發具體的異常,我們使用 raise 語句,如下所示。示例 import sys try: f = float('Tutorialspoint') print f raise ValueError except Exception as err: print sys.exc_info() 輸出 我們得到以下輸出 (, ValueError('could not convert string to float: Tutorialspoint', ), ) 我們可以甚至使用引數引發錯誤,如下例所示 示例 try: raise ValueError('foo', 23) except ValueError, e: ... 閱讀更多
232 次瀏覽
在處理一個異常“A”的過程中,可能會發生另一個異常“B”。在 Python 2.0 版本中,如果發生這種情況,異常 B 將向外傳播,而異常 A 將丟失。為了除錯問題,瞭解這兩個異常都很有用。有時,異常處理程式故意重新引發異常很有用,這可以提供額外資訊或將異常轉換為另一種型別。__cause__ 屬性提供了一種記錄異常的直接原因的明確方法。異常鏈僅在 Python 3 中可用。Python 3 具有 raise………… 閱讀更多
949 次瀏覽
在 Python 中處理異常的常用方法是使用“try-except”塊。我們甚至可以在 except 子句之後包含 else 子句。如果 try 語句中沒有異常,則執行 else 塊中的語句。如果並且只有當控制流從 try 子句的末尾流出時(除了異常或 return、continue 或 break 語句的執行情況),才執行可選的 else 子句。示例 給定的程式碼可以改寫如下 a = [11, 8, 9, 2] try: foo = a[3] except: print "索引超出範圍" else: print "索引正常"…… 閱讀更多