1. 程式人生 > >Python:sys模組的excepthook()函式(例外的堆疊追蹤6)

Python:sys模組的excepthook()函式(例外的堆疊追蹤6)

"""
1.對於一個未匹配到的例外,python直譯器最後會呼叫sys.excepthook()並傳入3個自變數:例外型別、例外例項
  和traceback物件,也就是sys.exc_info()返回元組中的3個值。預設顯示相關例外的追蹤資訊。
2.如果想自定義sys.excepthook()被呼叫時的行為,可以自定義一個接受3個自變數的函式給sys.excepthook。

"""


import time,sys
def m():
    return 1 / 0

def n():
    m()

def p():
    n()

def myExcepthook(ttype,tvalue,ttraceback):
    print("例外型別:{}".format(ttype))
    print("例外物件:{}".format(tvalue))
    i = 1
    while ttraceback:
        print("第{}層堆疊資訊".format(i))
        tracebackCode = ttraceback.tb_frame.f_code
        print("檔名:{}".format(tracebackCode.co_filename))
        print("函式或者模組名:{}".format(tracebackCode.co_name))
        ttraceback = ttraceback.tb_next
        i += 1


if __name__ == '__main__':
    sys.excepthook = myExcepthook
    p()

    time.sleep(3)
    print("繼續執行")