python列印異常信息
『壹』 python中的testresult怎麼用
TestResult方法介紹
1. printErrors
作用:被TestRunner在執行玩測試內容的時候調用,列印錯誤信息,默認不輸出任何信息
輸入參數:無
輸出參數:無
返回值:無
2. startTest(self, test)
作用:在每個測試條目執行測試之前被調用,將測試條目個數加一,設置_mirrorOutput為False ,最後根據buffer參數,設置 sys.stderr 和sys.stdout,
輸入參數:test 測試用例類的實例化對象
輸出參數:
返回值:
3. startTestRun
作用: 在runner開始執行測試用例之前被調用,默認不執行內容,和startTest不同,startTest是在Testcase子類調用。
輸入參數:無
輸出參數:無
返回值:無
4. stopTest (self, test)
作用: 在測試用例執行測試條目之後被調用,如果處於buffer狀態,並且mirrorOutput為真,即測試條目執行失敗或異常,則將原來緩存的數據進行輸出。然後將緩存數據清空,並_mirrorOutput置為False
輸入參數:test 測試用例類的實例化對象
輸出參數:無
返回值:無
5 stopTestRun
作用: 在runner執行完所有的測試用例後被調用,默認不執行內容,和stopTest不同,stopTest是在Testcase子類調用。
輸入參數:無
輸出參數:無
返回值:無
6. addError(self, test, err)
作用: 在測試用例類執行完測試條目錯誤或異常後被調用,
輸入參數:test 測試用例類的實例化對象
Err 是根據sys.exc_info()返回的對象, 是一個三元組,(exctype, value, tb) exctype是異常類型,value 是具體的異常數據,tb 是traceback的內容
輸出參數:無
返回值:無
7. addFailure(self, test, err)
作用:在測試用例類執行完測試條目失敗後被調用,,默認不執行內容,和stopTest不同,stopTest是在Testcase子類調用。
輸入參數:test 測試用例類的實例化對象
Err 是根據sys.exc_info()返回的對象, 是一個三元組,(exctype, value, tb)
exctype是異常類型,value 是具體的異常數據,tb 是traceback的內容,如果處在buffer
為真的情況下,還還會將當前的sys.stdout 和sys.stderr的內容也一並合並保存在failture的成員變數列表中的字元串內容中。
輸出參數:無
返回值:無
8. addError (self, test, err)
作用:在測試用例類執行完測試條目失敗後被調用,,默認不執行內容,和stopTest不同,stopTest是在Testcase子類調用。
輸入參數:test 測試用例類的實例化對象
Err 是根據sys.exc_info()返回的對象, 是一個三元組,(exctype, value, tb)
exctype是異常類型,value 是具體的異常數據,tb 是traceback的內容,如果處在buffer
為真的情況下,還還會將當前的sys.stdout 和sys.stderr的內容也一並合並保存在error的成員變數列表中的字元串內容中。
輸出參數:無
返回值:無
9. addSuccess (self, test)
作用:在測試用例類執行完測試條目成功後被調用,,默認不執行內容
輸入參數:test 測試用例類的實例化對象
輸出參數:無
返回值:無
10. addSkip( self, test, reason):
作用:在測試用例類執行的測試條目被skip後被調用,將該條目添加到 skipped 列表中
輸入參數:test 測試用例類的實例化對象 reson 是skip的原因
輸出參數:無
返回值:無
11. addExpectedFailure (self, test, err):
作用:在測試用例類執行的測試條目期望的失敗發生後被調用,將該條目添加到expectedFailures列表中
輸入參數:test 測試用例類的實例化對象 err是 該失敗的情況
輸出參數:無
返回值:無
12. addUnexpectedSuccess (self, test):
作用:在測試用例類執行的測試條目期望的失敗發生後被調用,將該條目添加到expectedFailures列表中
輸入參數:test 測試用例類的實例化對象 err是 該失敗的情況
輸出參數:無
返回值:無
13. wasSuccessful
作用:通過判斷failures和errors列表是否為空,判斷所有測試條目是否執行成功
輸入參數: 無
輸出參數:無
返回值:無
14. stop
作用: shouldStop設置為True,用於終止測試
輸入參數: 無
輸出參數:無
返回值:無
15. _exc_info_to_string (self, err, test):
作用: 將err 異常數據整理成字元串,並且如果有buffer為真,將sys.stdout 和sys.stderr的數據也添加到返回的字元串中
輸入參數: 無
輸出參數:無
返回值:字元串
16. _is_relevant_tb_level(self, tb):
作用: 將err 異常數據整理成字元串,並且如果有buffer為真,將sys.stdout 和sys.stderr的數據也添加到返回的字元串中
輸入參數: 無
輸出參數:無
返回值:字元串
17. _count_relevant_tb_levels(self, tb):
作用: 獲取traceback的層次數
輸入參數: 無
輸出參數:無
返回值:traceback的層次數
18, __repr__
作用: 返回一個顯示測試項執行的數目以及測試失敗的條目和異常的條目的個數。
輸入參數: 無
輸出參數:無
返回值:字元串
注釋:
addError和addFailure 以及
addUnexpectedSuccess 函數 都有裝飾器@failfast,有了該裝飾器,則在實際調用 上述三個函數的時候,都會被封裝一層 ,額外添加的功能就是會被用在發生錯誤或失敗的時候停止測試。
def failfast(method):
@wraps(method)
def inner(self, *args, **kw):
if getattr(self, 'failfast', False):
self.stop()
return method(self, *args, **kw)
return inner
『貳』 多進程環境python logging列印日誌混亂問題
解決辦法如下:
多麼痛的領悟,困擾了這么久的問題其實就是一個參數配置錯了。
fileMode:表示日誌文件的打開方式。w-直接寫,使用這個配置當系統重啟的時候日誌會清空,一個進程打開後其他進程是無法使用的;a-尾部追加,大家都可以打開往文件結尾進行追加寫入。
本人主語言是java,轉到python後日誌這塊踩了幾個坑。再說說另外一個坑,就是異常堆棧的列印問題,在java中logger是可以使用error直接列印出來的。在python中error跟其他日誌記錄方法沒太大差別,是無法列印異常堆棧的,列印堆棧請使用 logger.exception("異常說明", e) 。
『叄』 python 怎麼列印異常
try:
#你認為會出異常的代碼
exceptException,e:
#異常的堆棧信息
printe
#如果需要拋出異常
raisee
『肆』 python中的raise前的print列印沒有顯示
在 Python 中,raise 語句用於拋出一個異常。在 raise 語句之前的 print 語句會在拋出異常之前執行,如果你在使用 raise 語句時發現 print 語句沒有顯示,銷敬那麼可能是因為 raise 語句之後的代碼沒有被執行。局斗激
舉個例子,如果你有如下代碼:
def foo():
print("before raise")
raise Exception("error")
print("after raise")
foo()
那麼在執行 foo 函數時,會先列印 "before raise",然後拋出 Exception 異常,因此 "after raise" 不會被列印出來。
如果你希望在拋出異常之前列印出相應的信息,建議使用 try-except 語句來捕獲異常,在 except 塊中列印信息。這樣,就可以保證在拋出異常之前,所有的代碼都會被執行。
例如,可以使桐襪用如下代碼來捕獲異常:
def foo():
try:
print("before raise")
raise Exception("error")
print("after raise")
except Exception as e:
print("error:", e)
foo()
在這種情況下,執行 foo 函數時會先列印 "before raise",然後拋出 Exception 異常,最後列印 "error: error"。
『伍』 Python 異常處理總結
什麼是異常?
異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行。一般情況下,在Python無法正常處理程序時就會發生一個異常。
異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
python提供了兩個非常重要的功能來處理python程序在運行中出現的異常和錯誤。你可以使用該功能來調試python程序。
異常處理: 本站Python教程會具體介紹。
斷言(Assertions):本站Python教程會具體介紹。
異常處理
捕捉異常可以使用try/except語句。try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。如果你不想在異常發生時結束你的程序,只需在try里捕獲它。
語法:
以下為簡單的try….except…else的語法:
try的工作原理是,當開始一個try語句後,python就在當前程序的上下文中作標記,這樣當異常出現時就可以回到這里,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
· 如果當try後的語句執行時發生異常,python就跳回到try並執行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發新的異常)。
· 如果在try後的語句里發生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結束程序,並列印預設的出錯信息)。
· 如果在try子句執行時沒有發生異常,python將執行else語句後的語句(如果有else的話),然後控制流通過整個try語句。
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,且並未發生異常:
以上程序輸出結果:
實例
下面是簡單的例子,它打開一個文件,在該文件中的內容寫入內容,但文件沒有寫入許可權,發生了異常:
以上程序輸出結果:
使用except而不帶任何異常類型
你可以不帶任何異常類型使用except,如下實例:
以上方式try-except語句捕獲所有發生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。
使用except而帶多種異常類型
你也可以使用相同的except語句來處理多個異常信息,如下所示:
try-finally 語句
try-finally 語句無論是否發生異常都將執行最後的代碼。
實例
如果打開的文件沒有可寫許可權,輸出如下所示:
同樣的例子也可以寫成如下方式:
當在try塊中拋出一個異常,立即執行finally塊代碼。finally塊中的所有語句執行後,異常被再次提出,並執行except塊代碼。參數的內容不同於異常。
異常的參數
一個異常可以帶上參數,可作為輸出的異常信息參數。你可以通過except語句來捕獲異常的參數,如下所示:
變數接收的異常值通常包含在異常的語句中。在元組的表單中變數可以接收一個或者多個值。
元組通常包含錯誤字元串,錯誤數字,錯誤位置。
實例
以下為單個異常的實例:
以上程序執行結果如下:
觸發異常
我們可以使用raise語句自己觸發異常
raise語法格式如下:
語句中Exception是異常的類型(例如,NameError)參數是一個異常參數值。該參數是可選的,如果不提供,異常的參數是」None」。
最後一個參數是可選的(在實踐中很少使用),如果存在,是跟蹤異常對象。
實例
一個異常可以是一個字元串,類或對象。 Python的內核提供的異常,大多數都是實例化的類,這是一個類的實例的參數。
定義一個異常非常簡單,如下所示:
注意:為了能夠捕獲異常,」except」語句必須有用相同的異常來拋出類對象或者字元串。
例如我們捕獲以上異常,」except」語句如下所示:
用戶自定義異常
通過創建一個新的異常類,程序可以命名它們自己的異常。異常應該是典型的繼承自Exception類,通過直接或間接的方式。
以下為與RuntimeError相關的實例,實例中創建了一個類,基類為RuntimeError,用於在異常觸發時輸出更多的信息。
在try語句塊中,用戶自定義的異常後執行except塊語句,變數 e 是用於創建Networkerror類的實例。
在你定義以上類後,你可以觸發該異常,如下所示:
來源 | 腳本之家 原文鏈接:http://www.jb51.net/article/47996.htm
『陸』 python中異常處理的使用方法
8.3. 異常處理
通過編程處理選擇的異常是可行的。看一下下面的例子:它會一直要求用戶輸入,直到輸入一個合法的整數為止,但允許用戶中斷這個程序(使用 Control-C 或系統支持的任何方法)。注意:用戶產生的中斷會引發一個 KeyboardInterrupt 異常。
>>> while True:
... try:
... x = int(input("Please enter a number: "))
... break
... except ValueError:
... print("Oops! That was no valid number. Try again...")
...
try 語句按如下方式工作。
首先,執行 try 子句 (在 try 和 except 關鍵字之間的部分)。
如果沒有異常發生, except 子句 在 try 語句執行完畢後就被忽略了。
如果在 try 子句執行過程中發生了異常,那麼該子句其餘的部分就會被忽略。
如果異常匹配於 except 關鍵字後面指定的異常類型,就執行對應的except子句。然後繼續執行 try 語句之後的代碼。
如果發生了一個異常,在 except 子句中沒有與之匹配的分支,它就會傳遞到上一級 try 語句中。
如果最終仍找不到對應的處理語句,它就成為一個 未處理異常,終止程序運行,顯示提示信息。
一個 try 語句可能包含多個 except 子句,分別指定處理不同的異常。至多隻會有一個分支被執行。異常處理程序只會處理對應的 try 子句中發生的異常,在同一個 try 語句中,其他子句中發生的異常則不做處理。一個 except 子句可以在括弧中列出多個異常的名字,例如:
... except (RuntimeError, TypeError, NameError):
... pass
最後一個 except 子句可以省略異常名稱,以作為通配符使用。你需要慎用此法,因為它會輕易隱藏一個實際的程序錯誤!可以使用這種方法列印一條錯誤信息,然後重新拋出異常(允許調用者處理這個異常):
『柒』 python初學者Traceback (most recent call last):
1、打開Python開發工具IDLE,新建『myexcept.py』文件,並寫代碼如下:
classmyException(Exception):
def__init__(self,error):
self.error=error
def__str__(self,*args,**kwargs):
returnself.error
這就是自定義定義的異常類,繼承自Exception父類,有error欄位,__str__函數的作用是列印對象時候,顯示的字元串。