日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

pythontry参数_Python ——Try Except

發(fā)布時(shí)間:2023/12/18 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pythontry参数_Python ——Try Except 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Debug是學(xué)習(xí)代碼的必經(jīng)之路,代碼運(yùn)行時(shí)出現(xiàn)錯(cuò)誤很常見(jiàn),這個(gè)時(shí)候就需要我們擁有找到錯(cuò)誤并解決錯(cuò)誤的能力,那么try...except將必不可少。

首先上干貨:

import traceback

try:

print("我是函數(shù)主體")

except Exception as e:

traceback.print_exc()

print("出現(xiàn)異常來(lái)這里")

else:

print("沒(méi)異常就繼續(xù)")

finally:

print("最終都會(huì)來(lái)這里")

一、對(duì)上述代碼進(jìn)行拆分

1、else:若try中的函數(shù)沒(méi)有發(fā)生異常,將執(zhí)行else下的代碼。

else 必須放在所有的except之后。

2、finally:無(wú)論有無(wú)異常發(fā)生,都將執(zhí)行finally中的代碼。

以上二者都不是必須的,所以極簡(jiǎn)的模式為:

import traceback

try:

xxxx

except Exception as e:

traceback.print_exc()

二、輸出異常信息

1、print e:這個(gè)語(yǔ)句可謂是新手必備,它可以輸出錯(cuò)誤,但是效果嘛...看例子吧:

try:

a = 10/0

except Exception as e:

print(e)

輸出結(jié)果:

division by zero

這個(gè)結(jié)果讓人摸不著頭腦,division by zero!到底是哪里division by zero了?

2、traceback.print_exc() :打印詳細(xì)的異常信息。(神器來(lái)了)

import traceback

try:

a = 10/0

except Exception as e:

traceback.print_exc()

輸出結(jié)果:

Traceback (most recent call last):

File "xxxx\test1.py", line 4, in

a = 10/0

ZeroDivisionError: division by zero

第四行的xxx中division by zero,多么詳細(xì)的信息啊,有時(shí)候,debug就是這么簡(jiǎn)單!

三、sys & traceback

1、sys:說(shuō)一說(shuō)其中的exc_info()方法。

exc_info() 方法會(huì)將當(dāng)前的異常信息以元組的形式返回,該元組中包含 3 個(gè)元素,分別為 type、value 和 traceback,它們的含義分別是:type:異常類型的名稱,它是 BaseException 的子類

value:捕獲到的異常實(shí)例。

traceback:是一個(gè) traceback 對(duì)象。

上例子:

import sys

try:

a = 10/0

except Exception as e:

print(sys.exc_info())

輸出結(jié)果:

(, ZeroDivisionError('division by zero'), )

可看出發(fā)生了一個(gè)ZeroDivisionError類型的錯(cuò)誤,錯(cuò)誤實(shí)例為:division by zero,然后還有一個(gè)traceback 對(duì)象。

可使用traceback 包中的print_tb方法讀取traceback對(duì)象,并打印出來(lái):

import sys

import traceback

try:

a = 10/0

except Exception as e:

traceback_obj = sys.exc_info()[2]

traceback.print_tb(traceback_obj)

輸出結(jié)果:

File "xxxx\test1.py", line 5, in

a = 10/0

可見(jiàn),traceback 對(duì)象內(nèi)包含的就是詳細(xì)的異常信息。

2、traceback 包提供了一整套接口用于提取,格式化和打印Python程序的stack traces信息。

上面說(shuō)道整個(gè)異常的傳播軌跡都存儲(chǔ)在traceback對(duì)象中,可使用traceback包中的方法來(lái)讀取,不過(guò)老是取對(duì)象,讀一下也略繁瑣,然后traceback干脆糖了一波:

上面說(shuō)的:traceback.print_tb()方法只讀取traceback對(duì)象的內(nèi)容。

而:traceback.print_exc()方法更高級(jí),讀取type,value以及traceback對(duì)象的全部?jī)?nèi)容,更厲害的是它直接把sys.exc_info()嵌在了內(nèi)部,無(wú)需手動(dòng)獲取,可以看一下源碼:

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,然后對(duì)比一下二者輸出的異常信息:

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

仔細(xì)閱讀源碼的同學(xué)已經(jīng)發(fā)現(xiàn):

def print_exc(limit=None, file=None, chain=True)

通過(guò)傳遞file參數(shù),可以將異常信息直接打印到文件中。

當(dāng)然還有一種方式,尤其是使用logging包的同學(xué):

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) 可直接將詳細(xì)的信息打印到日志文件中,方便日后的debug.

OK了,大概就是這些,若有幫助,記得點(diǎn)贊+關(guān)注

總結(jié)

以上是生活随笔為你收集整理的pythontry参数_Python ——Try Except的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。