首頁 > 軟體

python 列印完整異常問題

2022-11-15 14:01:16

python列印完整異常

import traceback
if __name__ == "__main__":
    try:
        print(1/0)
    except Exception:
        print(traceback.format_exc())

python異常捕獲與列印

為什麼要進行異常捕獲?

在python程式中如果程式碼中有異常,不進行異常捕獲的話,程式碼遇到異常就會終止執行,影響程式的健壯性,故要進行異常捕獲處理,使得程式遇到不可知的異常,不會終止,在exception程式碼塊中進行例外處理後繼續後面的程式碼執行。

異常捕獲是捕獲什麼?

* 異常型別
* 異常追蹤資訊
*  異常內容

異常捕獲的程式碼格式?

try:
    {content code}
except Exception as e:
    print("substitude exception,type={},content={}".format(repr(e),e))#y
else:
    print("code exec correct")#沒有遇到異常,可以省略
finally:
     print("finnally echo")#無論是否遇到異常都會執行這段內容,先執行exception處理,後執行finally

利用raise自己定義異常並丟擲,丟擲的異常必須繼承一個已有的異常型別,如TypeError(“param must be dict”)

def func3(p):
    if type(p)!= dict:
        raise TypeError("param must be dict")
    else:
        print(p)
if __name__ == '__main__':
 try:
    func3("123")
 except Exception as e:
    print("exception,type={},content={}".format(repr(e),e))
 finally:
     print("finnally echo")
    --------------------
    列印結果
    exception,type=TypeError('param must be dict'),content=param must be dict
finnally echo

列印異常

程式碼舉例:

try:
    str2json = json.loads(str)
    return jsonpath.jsonpath(str2json,expr)
except Exception as e:
    cls.logger.info('collectjson exception = {}'.format(str(e)))

repr(e) 列印異常的型別 ,如在json轉字串時,傳入一個字串,那麼會拋異常,repr(e)列印的是 JSONDecodeError('Extra data: line 1 column 8 (char 7)',清晰的看出來這個是json轉換出了問題

str(e) 列印問題程式碼的具體問題行

Traceback (most recent call last):
  File "D:/python-workspace/iaminterfaceTest/jsonUtil.py", line 14, in collectjson
    str2json = json.loads(str)
  File "D:python37Libjson__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "D:python37Libjsondecoder.py", line 340, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 8 (char 7)

常見異常

  • IOError 檔案讀寫異常,一般是檔案不存在或者檔案不可寫入
  • ImportError 無法匯入模組或者物件,主要是路徑有誤或名稱錯誤
  • TypeError 型別轉換異常
  • KeyError ditc讀取key值不對,一般是不存在這個key值

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com