pythontry参数_Python ——Try Except
Debug是學習代碼的必經之路,代碼運行時出現(xiàn)錯誤很常見,這個時候就需要我們擁有找到錯誤并解決錯誤的能力,那么try...except將必不可少。
首先上干貨:
import traceback
try:
print("我是函數(shù)主體")
except Exception as e:
traceback.print_exc()
print("出現(xiàn)異常來這里")
else:
print("沒異常就繼續(xù)")
finally:
print("最終都會來這里")
一、對上述代碼進行拆分
1、else:若try中的函數(shù)沒有發(fā)生異常,將執(zhí)行else下的代碼。
else 必須放在所有的except之后。
2、finally:無論有無異常發(fā)生,都將執(zhí)行finally中的代碼。
以上二者都不是必須的,所以極簡的模式為:
import traceback
try:
xxxx
except Exception as e:
traceback.print_exc()
二、輸出異常信息
1、print e:這個語句可謂是新手必備,它可以輸出錯誤,但是效果嘛...看例子吧:
try:
a = 10/0
except Exception as e:
print(e)
輸出結果:
division by zero
這個結果讓人摸不著頭腦,division by zero!到底是哪里division by zero了?
2、traceback.print_exc() :打印詳細的異常信息。(神器來了)
import traceback
try:
a = 10/0
except Exception as e:
traceback.print_exc()
輸出結果:
Traceback (most recent call last):
File "xxxx\test1.py", line 4, in
a = 10/0
ZeroDivisionError: division by zero
第四行的xxx中division by zero,多么詳細的信息啊,有時候,debug就是這么簡單!
三、sys & traceback
1、sys:說一說其中的exc_info()方法。
exc_info() 方法會將當前的異常信息以元組的形式返回,該元組中包含 3 個元素,分別為 type、value 和 traceback,它們的含義分別是:type:異常類型的名稱,它是 BaseException 的子類
value:捕獲到的異常實例。
traceback:是一個 traceback 對象。
上例子:
import sys
try:
a = 10/0
except Exception as e:
print(sys.exc_info())
輸出結果:
(, ZeroDivisionError('division by zero'), )
可看出發(fā)生了一個ZeroDivisionError類型的錯誤,錯誤實例為:division by zero,然后還有一個traceback 對象。
可使用traceback 包中的print_tb方法讀取traceback對象,并打印出來:
import sys
import traceback
try:
a = 10/0
except Exception as e:
traceback_obj = sys.exc_info()[2]
traceback.print_tb(traceback_obj)
輸出結果:
File "xxxx\test1.py", line 5, in
a = 10/0
可見,traceback 對象內包含的就是詳細的異常信息。
2、traceback 包提供了一整套接口用于提取,格式化和打印Python程序的stack traces信息。
上面說道整個異常的傳播軌跡都存儲在traceback對象中,可使用traceback包中的方法來讀取,不過老是取對象,讀一下也略繁瑣,然后traceback干脆糖了一波:
上面說的:traceback.print_tb()方法只讀取traceback對象的內容。
而:traceback.print_exc()方法更高級,讀取type,value以及traceback對象的全部內容,更厲害的是它直接把sys.exc_info()嵌在了內部,無需手動獲取,可以看一下源碼:
def print_exc(limit=None, file=None, chain=True):
"""Shorthand for 'print_exception(*sys.exc_info(), limit, file)'."""
print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain)
ok,然后對比一下二者輸出的異常信息:
traceback.print_tb()
File "xxxx\test1.py", line 5, in
a = 10/0
traceback.print_exc()
Traceback (most recent call last):
File "xxxx\test1.py", line 4, in
a = 10/0
ZeroDivisionError: division by zero
四、福利環(huán)節(jié):輸出到log
仔細閱讀源碼的同學已經發(fā)現(xiàn):
def print_exc(limit=None, file=None, chain=True)
通過傳遞file參數(shù),可以將異常信息直接打印到文件中。
當然還有一種方式,尤其是使用logging包的同學:
import logging
logger = logging.getLogger(__name__)
try:
a = 10/0
except Exception as e:
logger.error("Error:",exc_info=True)
logger.error("Error:",exc_info=True) 可直接將詳細的信息打印到日志文件中,方便日后的debug.
OK了,大概就是這些,若有幫助,記得點贊+關注
總結
以上是生活随笔為你收集整理的pythontry参数_Python ——Try Except的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python线程执行完后释放内存_pyt
- 下一篇: spring cloud eureka