網(wǎng)站信息化建設(shè)總體情況百度大搜
目錄
一、try except異常處理的語句格式
二、獲取相關(guān)異常信息
(1)sys.exec_info()
三、traceback模塊的常用方式
(1)traceback.print_tb(tb,?limit=None,?file=None)?打印指定堆棧異常信息
?(2)traceback.print_exception(exc,?/,?[value,?tb,?]limit=None,?file=None,?chain=True)?和?traceback.print_exc(limit=None,?file=None,?chain=True)?打印指定堆棧異常信息
?(3)traceback.format_list(extracted_list)?和 traceback.format_exception(exc,?/,?[value,?tb,?]limit=None,?chain=True)? 返回可打印的錯(cuò)誤信息字符串列表
?(4)和?traceback.format_exc(limit=None,?chain=True)? 返回錯(cuò)誤信息字符串
一、try except異常處理的語句格式
try:可能產(chǎn)生異常的代碼塊
except [ (Error1, Error2, ... ) [as e] ]:處理異常的代碼塊1
except [ (Error3, Error4, ... ) [as e] ]:處理異常的代碼塊2
except? [Exception]:處理其它異常
finally:最后做其他事情,finally必定執(zhí)行
二、獲取相關(guān)異常信息
(1)sys.exec_info()
sys.exc_info() 該函數(shù)會返回一個(gè)元組(type(e),?e,?e.__traceback__)。
該元組記錄錯(cuò)誤類型、錯(cuò)誤信息、錯(cuò)誤信息所在堆棧。如果沒有異常發(fā)生,則會返回一個(gè)空的元組
示例:
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:errType, errInfo, errTraceBack = sys.exc_info()print(errType) # <class 'ZeroDivisionError'>print(errInfo) # integer division or modulo by zeroprint(errTraceBack) # <traceback object at 0x000001FEF8C7BB80>if __name__ == "__main__":func1(1, 0)
三、traceback模塊的常用方式
相關(guān)官方文檔:traceback —— 打印或讀取堆棧的跟蹤信息 — Python 3.11.2 文檔
(1)traceback.print_tb(tb,?limit=None,?file=None)?打印指定堆棧異常信息
- traceback.print_tb(tb,?limit=None,?file=None)?其中tb指的是從sys.exc_info()獲取的traceback堆棧類型,limit指的是報(bào)告錯(cuò)誤的堆棧層數(shù),file指的是輸出到哪個(gè)文件流中,默認(rèn)為stderr
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:errType, errInfo, errTraceBack = sys.exc_info()traceback.print_tb(errTraceBack)
'''File "d:\Python WorkSpace\GameAssist\test2.py", line 10, in func1return func(a, b)File "d:\Python WorkSpace\GameAssist\test2.py", line 6, in funcreturn a // b
'''if __name__ == "__main__":func1(1, 0)
?(2)traceback.print_exception(exc,?/,?[value,?tb,?]limit=None,?file=None,?chain=True)?和?traceback.print_exc(limit=None,?file=None,?chain=True)?打印指定堆棧異常信息
- traceback.print_exception(exc,?/,?[value,?tb,?]limit=None,?file=None,?chain=True)?打印回溯對象?tb?到?file?的異常信息和整個(gè)堆?;厮?。
- traceback.print_exc(limit=None,?file=None,?chain=True)?相當(dāng)于
print_exception(*sys.exc_info(),?limit,?file,?chain)
?的簡寫
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:traceback.print_exception(e)traceback.print_exception(e, file=open("./ErrorLog.txt", "a+"))
'''
Traceback (most recent call last):File "d:\Python WorkSpace\GameAssist\test2.py", line 9, in func1return func(a, b)File "d:\Python WorkSpace\GameAssist\test2.py", line 5, in funcreturn a // b
ZeroDivisionError: integer division or modulo by zero
'''
if __name__ == "__main__":func1(1, 0)
?(3)traceback.format_list(extracted_list)?和 traceback.format_exception(exc,?/,?[value,?tb,?]limit=None,?chain=True)? 返回可打印的錯(cuò)誤信息字符串列表
- traceback.format_list(extracted_list)給定一個(gè)由元組或如?extract_tb()?或?extract_stack()?所返回的?FrameSummary?對象組成的列表,返回一個(gè)可打印的字符串列表
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:errType, errInfo, errTraceBack = sys.exc_info()print(traceback.format_list(traceback.extract_tb(errTraceBack)))
'''
[' File "d:\\Python WorkSpace\\GameAssist\\test2.py", line 9, in func1\n return func(a, b)\n', ' File "d:\\Python WorkSpace\\GameAssist\\test2.py", line 5, in func\n return a // b\n']
'''if __name__ == "__main__":func1(1, 0)
- ?traceback.format_exception(exc,?/,?[value,?tb,?]limit=None,?chain=True)? 格式化一個(gè)棧跟蹤和異常信息。 參數(shù)的含義與傳給?print_exception()?的相應(yīng)參數(shù)相同。 返回值是一個(gè)字符串列表,每個(gè)字符串都以一個(gè)換行符結(jié)束且有些還包含內(nèi)部換行符。
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:print(traceback.format_exception(e))'''
['Traceback (most recent call last):\n', ' File "d:\\Python WorkSpace\\GameAssist\\test2.py", line 9, in func1\n return func(a, b)\n', ' File "d:\\Python WorkSpace\\GameAssist\\test2.py", line 5, in func\n return a // b\n', 'ZeroDivisionError: integer division or modulo by zero\n']
'''if __name__ == "__main__":func1(1, 0)
?(4)和?traceback.format_exc(limit=None,?chain=True)? 返回錯(cuò)誤信息字符串
- traceback.format_exc(limit=None,?chain=True)?這類似于?
print_exc(limit)
?但會返回一個(gè)字符串而不是打印到一個(gè)文件
import sys
import tracebackdef func(a: int, b: int):return a // bdef func1(a: int, b: int):try:return func(a, b)except Exception as e:print(traceback.format_exc())'''
Traceback (most recent call last):File "d:\Python WorkSpace\GameAssist\test2.py", line 9, in func1return func(a, b)File "d:\Python WorkSpace\GameAssist\test2.py", line 5, in funcreturn a // b
ZeroDivisionError: integer division or modulo by zero
'''if __name__ == "__main__":func1(1, 0)