python獲取異常信息exc_info和print_exc的使用
1 python獲取異常信息exc_info和print_exc
python通過(guò)sys.exc_info獲取異常信息,通過(guò)traceback.print_exc打印堆棧信息,包括錯(cuò)誤類(lèi)型和錯(cuò)誤位置等信息。
1.1 異常不一定是錯(cuò)誤
所有錯(cuò)誤都是異常,但并非所有異常都是錯(cuò)誤。比如,有些異常表示警告(參考warnings模塊),有些異常是功能信號(hào)(比如,input函數(shù)從標(biāo)準(zhǔn)輸入流sys.stdin讀取輸入)。
用法
while True: try: ins=input('請(qǐng)輸入:') except EOFError as e: # except 代碼塊 break else: print('你輸入的是:',ins)
描述
(1) 通過(guò)input循環(huán)獲取用戶(hù)輸入;
(2) 通過(guò)EOFError 作為功能信號(hào),觸發(fā)則退出輸入;
(3) 通過(guò)Ctrl+D(windows)或Ctrl+Z(Unix)觸發(fā)EOFError 異常;
示例
>>> import traceback >>> while True: try: ins=input('請(qǐng)輸入:') except EOFError as e: # 通過(guò) Ctrl+D 或 Ctrl+Z 觸發(fā) EOFError print('遇到 Ctrl+D 或 Ctrl+Z,退出輸入') print(traceback.print_exc()) break else: print('你輸入的是:',ins) 請(qǐng)輸入:梯閱線(xiàn)條 你輸入的是: 梯閱線(xiàn)條 請(qǐng)輸入: 遇到 Ctrl+D 或 Ctrl+Z,退出輸入 Traceback (most recent call last): File "<pyshell#58>", line 3, in <module> EOFError: EOF when reading a line None
1.2 異常條件語(yǔ)句和raise
python自定義異常也可用于觸發(fā)非錯(cuò)誤的情況,根據(jù)條件語(yǔ)句觸發(fā)raise異常。
用法
class FoundByExc(Exception):pass def search_by_exc(strlist,target): if True: raise FoundByExc("xxx") else: return "xxx"
描述
搜索指定內(nèi)容時(shí)觸發(fā)異常。
(1) 自定義一個(gè)異常類(lèi);
(2) 條件成立,觸發(fā)異常;
示例
>>> class FoundByExc(Exception):pass >>> def search_by_exc(strlist,target): for s in strlist: if s == target: raise FoundByExc("在{}找到'{}'".format(strlist,target)) else: return "在{}未找到'{}'".format(strlist,target) >>> def test_searchbyexc(strlist,target): try: sbe=search_by_exc(strlist,target) except FoundByExc as fbe: print(fbe) else: print(sbe) >>> strlist=['梯閱線(xiàn)條','tyxt.work','9555'] >>> target1='梯閱線(xiàn)條';target2='tyxt' >>> test_searchbyexc(strlist,target1) 在['梯閱線(xiàn)條', 'tyxt.work', '9555']找到'梯閱線(xiàn)條' >>> test_searchbyexc(strlist,target2) 在['梯閱線(xiàn)條', 'tyxt.work', '9555']未找到'tyxt'
1.3 sys.exc_info獲取異常信息
python中空的except捕獲任何未被捕獲的異常,通過(guò)sys.exc_info獲取捕獲的實(shí)際異常。
用法
import sys sys.exc_info()
描述
返回元組(type,value,traceback),
type:捕獲的異常類(lèi)型;
value:捕獲的異常類(lèi)的實(shí)例;
traceback:觸發(fā)異常的調(diào)用堆棧;
示例
>>> try: 1+[] except: print(sys.exc_info()) (<class 'TypeError'>, TypeError("unsupported operand type(s) for +: 'int' and 'list'"), <traceback object at 0x03EFEE40>)
1.4 traceback.print_exc打印異常堆棧
用法
import traceback try: # try 代碼塊 except xxx: # except 代碼塊 traceback.print_exc()
描述
當(dāng)Python程序發(fā)生異常時(shí),通過(guò)traceback.print_exc()獲取異常的詳細(xì)信息,包括異常類(lèi)型、異常值和異常發(fā)生的位置信息。
(1) 導(dǎo)入 traceback模塊;
(2) 在except處理器,調(diào)用traceback.print_exc()方法;
示例
>>> import traceback >>> try: 1+[] except: traceback.print_exc() Traceback (most recent call last): File "<pyshell#79>", line 2, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'list'
到此這篇關(guān)于python獲取異常信息exc_info和print_exc的使用的文章就介紹到這了,更多相關(guān)python獲取異常信息 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
From CSV to SQLite3 by python 導(dǎo)入csv到sqlite實(shí)例
今天小編就為大家分享一篇From CSV to SQLite3 by python 導(dǎo)入csv到sqlite實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python實(shí)現(xiàn)批量上傳本地maven庫(kù)到nexus
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量上傳本地maven庫(kù)到nexus,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下2024-01-01Python PyQt5實(shí)戰(zhàn)項(xiàng)目之查詢(xún)器的實(shí)現(xiàn)流程詳解
PyQt5以一套Python模塊的形式來(lái)實(shí)現(xiàn)功能。它包含了超過(guò)620個(gè)類(lèi),600個(gè)方法和函數(shù)。它是一個(gè)多平臺(tái)的工具套件,它可以運(yùn)行在所有的主流操作系統(tǒng)中,包含Unix,Windows和Mac OS。PyQt5采用雙重許可模式。開(kāi)發(fā)者可以在GPL和社區(qū)授權(quán)之間選擇2021-11-11