亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python - 如何獲取異常時棧中的數值

瀏覽:92日期:2022-07-04 17:40:14

問題描述

假設有這樣一段代碼:

try: a = 1 b = 0 c = a / bexcept Exception as e: print(e)

現在想在異常發生時獲取到異常發生前每個變量的數值,即獲取到a=1,b=0這樣的結果。

問題解答

回答1:

inspect.currentframe

>>> import inspect>>> a=1;b=0;a/bTraceback (most recent call last): File '<pyshell#10>', line 1, in <module> a=1;b=0;a/bZeropisionError: pision by zero>>> f=inspect.currentframe()>>> f.f_globals[’a’]1>>> f.f_globals[’b’]0>>> 回答2:

這個python應該是沒法主動實現的, 因為如果有這樣的方法, 在多層調用時, 出現了異常, 一層層記錄相應的數據然后再返回, 那么這很可能會導致內存方面的問題; 而且在出現異常前, 虛擬機也不知道你會問題, 就好像你上面的除零異常, 是在運行 a/b => 1/0, 在PyIntobjecti_pmod函數代碼實現中, 判斷出除數為0, 直接觸發異常, 然后一層層棧返回, 告訴用戶出現異常, 在try_block中也并沒有記錄符號的值相關的代碼, 所以頂多人為在except中, 做出更加精細, 人性化的輸出了

回答3:

使用ipython 把pdb打開,可以做到報哪一行出錯!

ZeropisionError: integer pision or modulo by zero> <ipython-input-4-a5ac4c0f15ad>(4)<module>() 1 2 a = 1 3 b = 0----> 4 c = a / bipdb> 回答4:

pdb

加入代碼如下:

#!/usr/bin/env python# encoding: utf-8try: a = 1 b = 0 c = a / bexcept Exception as e: import pdb; pdb.set_trace() # <-- 加入斷點 print(e)

執行如下:

? python sf.py> /Users/caimaoy/tmp/sf.py(10)<module>()-> print(e)(Pdb) ll 1 #!/usr/bin/env python 2 # encoding: utf-8 3 4 try: 5 a = 1 6 b = 0 7 c = a / b 8 except Exception as e: 9 import pdb; pdb.set_trace() 10 -> print(e)(Pdb) p a1(Pdb) p b0(Pdb)

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日韩 欧美 国产 亚洲 中文 | 久久精品成人免费看 | 国产va免费精品观看 | 97视频在线观看视频在线精品 | 特一级黄色大片 | 成人黄色在线观看 | 国产v综合v亚洲欧美大另类 | caoporen免费公开视频上传 | 一级毛片日韩 | 日韩亚洲欧美综合一区二区三区 | 中国一级片免费看 | 久久久久中文字幕 | 亚洲狠狠婷婷综合久久久久 | 欧美日韩视频在线一区二区 | 九九九国产在线 | 精品国产一区二区三区四区色 | 日韩欧美国产高清在线观看 | 国产高清在线a视频大全凹凸 | 欧美+日本+国产+在线观看 | 国产成人精品亚洲日本在线观看 | 欧美激情精品久久久久久久 | 特黄女一级毛片 | 黄色大片影院视频免费 | 国内自拍第1页 | 日韩a级片在线观看 | 激情五月色综合色婷婷 | 国产日韩在线播放 | 看全大色黄大色黄大片一级爽 | 亚洲图色网站 | 最近最新中文字幕在线第一页 | 亚洲国产精品免费 | 国产日韩欧美在线 | 久久福利一区二区 | 免费看黄色片 | 亚洲视频网站在线观看 | 国产亚洲第一 | 99久久国产免费中文无字幕 | 国产午夜精品久久久久九九 | 国产亚洲精品热视频在线观看 | 风间中文字幕亚洲一区中文馆 | 老外黑人欧美一级毛片 |