欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 追蹤except信息方式

 更新時間:2020年04月25日 10:28:45   作者:酷python  
這篇文章主要介紹了python 追蹤except信息方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

看下面這個函數(shù)

def test():
 sum = 3/0
 
if __name__ == '__main__':
 test()

除0肯定是不對的,會引發(fā)一個except,內(nèi)容如下:

File "E:\Src\dongsheng\TestPython\testtrace_back.py", line 23, in <module>
test()
File "E:\Src\dongsheng\TestPython\testtrace_back.py", line 19, in test
sum = 3/0
ZeroDivisionError: integer division or modulo by zero

上面的提示,是在IDE中運行時出現(xiàn)的,實際在線上運行腳本時,一般會用nohup 方式啟動,輸出內(nèi)容會寫入到nohup.out文件中,但這個文件里的內(nèi)容可能非常多,很雜亂,不利于異常的排查。

python 提供了traceback ,可以完美的輸出except發(fā)生時的信息,就和上面的內(nèi)容一樣,而且可以輸入到指定的文件之中,所以,不妨寫一個裝飾器,修飾那些需要監(jiān)督的函數(shù),當(dāng)他們發(fā)生異常時,記錄下有關(guān)異常的信息。

#coding=utf-8
from functools import wraps
import traceback
 
def except_trace(filename):
 def decorate(func):
  @wraps(func)
  def wrapper(*args,**kwargs):
   try:
    func(*args,**kwargs)
   except:
    fp = open(filename,'w')
    traceback.print_exc(file=fp)
    fp.close()
  return wrapper
 return decorate
@except_trace('1.txt')
def test():
 sum = 3/0
 
if __name__ == '__main__':
 test()

這一次,發(fā)生異常后,有關(guān)異常的信息會輸入到1.txt文件中,這個文件中只包含異常的信息,方便查看。

補充知識:Python 的 except 怪癖

讓我來展示一下我最喜歡的 Python 怪癖。你希望這段 Python 代碼做什么?

如果你是從另一種編程語言過來學(xué)習(xí) Python 的,你可能希望except子句引入嵌套范圍,因此在子句中賦值給 e 不會影響外部作用域中已有的 e 變量。然而,在 Python 中,控制結(jié)構(gòu)通常不引入嵌套作用域(列表推導(dǎo)是一個例外),所以如果你有更多的 Python 經(jīng)驗,你可能會期望它打印一個ZeroDivisionError實例。

實際上,在標(biāo)準 CPython 實現(xiàn)中,它什么也不打印;同時,最后一行將引發(fā)一個NameError。這是一個 bug 嗎?事實上,這是故意的。如果查看 except 子句生成的字節(jié)碼,可以看到:

當(dāng)控制流退出except塊時,Python 將從作用域中刪除該名稱。為什么?因為異常持有對當(dāng)前棧幀的引用,該棧幀包含作用域內(nèi)的所有內(nèi)容。由于Python主要是通過引用計數(shù)來管理內(nèi)存主體的,這意味著當(dāng)前作用域內(nèi)的任何內(nèi)容都不會被釋放,直到下一輪垃圾收集運行 (如果有的話)。目前的行為是內(nèi)存使用、易于實現(xiàn)和語言整潔之間的折衷。它有點缺點,但我認為它體現(xiàn)了我喜歡Python的一點:不讓純粹性妨礙實用性。

但這只解釋了DELETE_NAME指令。為什么 CPython 把e設(shè)為None,即便隨后立即就刪除了這個變量?好吧,設(shè)想你和 CPython 團隊有相同的想法,并且決定在 except 塊的末尾清理異常引用:

在except塊的末尾,CPython 將嘗試刪除你已經(jīng)刪除的名字e!為了解決這個問題,CPython 在刪除e之前賦值e = None,以確保e存在。

以上這篇python 追蹤except信息方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python輪詢機制控制led實例

    python輪詢機制控制led實例

    這篇文章主要介紹了python輪詢機制控制led實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pycharm新手教程(只需要看這篇就夠了)

    Pycharm新手教程(只需要看這篇就夠了)

    這篇文章主要介紹了Pycharm新手教程(只需要看這篇就夠了),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python無序鏈表刪除重復(fù)項的方法

    python無序鏈表刪除重復(fù)項的方法

    這篇文章主要介紹了python無序鏈表刪除重復(fù)項的方法,本文給大家介紹的非常詳細,具體一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • python使用protobufde的過程解析

    python使用protobufde的過程解析

    Google開源的一個序列化框架,類似于xml , json。最大的特點是基于 二進制,比傳統(tǒng)的xml表示同樣的內(nèi)容要短小很多。亦可定義一些可選字段,用于服務(wù)端與客戶端通信
    2021-08-08
  • Django model select的多種用法詳解

    Django model select的多種用法詳解

    最近看到 大神 運維咖啡吧的 一篇文章,這里只做個備份,講的是各種 django model 查詢,發(fā)現(xiàn)不錯,十分感謝該大神的無私奉獻
    2019-07-07
  • Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟

    Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟

    本文主要介紹了Jupyter Notebook切換conda虛擬環(huán)境的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python使用IP歸屬地查詢API追蹤網(wǎng)絡(luò)活動

    python使用IP歸屬地查詢API追蹤網(wǎng)絡(luò)活動

    這篇文章主要為大家介紹了python使用IP歸屬地查詢API追蹤網(wǎng)絡(luò)活動實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • python二分法查找函數(shù)底值

    python二分法查找函數(shù)底值

    大家好,本篇文章主要講的是python二分法查找函數(shù)底值,感興趣的同學(xué)趕快來看一看吧,對你有用的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 對python 命令的-u參數(shù)詳解

    對python 命令的-u參數(shù)詳解

    今天小編就為大家分享一篇對python 命令的-u參數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Python的Tornado框架實現(xiàn)一個簡單的WebQQ機器人

    使用Python的Tornado框架實現(xiàn)一個簡單的WebQQ機器人

    這篇文章主要介紹了使用Python的Tornado框架實現(xiàn)一個簡單的WebQQ機器人,Tornado的異步特性可以提高I/O性能,需要的朋友可以參考下
    2015-04-04

最新評論