Rumah > Soal Jawab > teks badan
Andaikan terdapat sekeping kod seperti ini:
try:
a = 1
b = 0
c = a / b
except Exception as e:
print(e)
Sekarang saya ingin mendapatkan nilai setiap pembolehubah sebelum pengecualian berlaku apabila pengecualian berlaku, iaitu, dapatkan keputusan seperti a=1, b=0.
習慣沉默2017-05-18 11:01:04
inspect.currentframe
>>> import inspect
>>> a=1;b=0;a/b
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
a=1;b=0;a/b
ZeropisionError: pision by zero
>>> f=inspect.currentframe()
>>> f.f_globals['a']
1
>>> f.f_globals['b']
0
>>>
PHP中文网2017-05-18 11:01:04
Ular sawa ini tidak sepatutnya dapat melaksanakan secara aktif, kerana jika terdapat kaedah sedemikian, pengecualian berlaku semasa panggilan berbilang lapisan, dan data yang sepadan direkodkan lapisan demi lapisan dan kemudian dikembalikan, maka ini mungkin menyebabkan masalah masalah ingatan; dan sebelum pengecualian berlaku, mesin maya tidak tahu bahawa anda mempunyai masalah, sama seperti pengecualian bahagian-dengan-sifar anda di atas sedang berjalan a/b => #, dalam# Dalam pelaksanaan i_pmod kod fungsi 🎜🎜#PyIntobject, ia dinilai bahawa pembahagi ialah 0, pengecualian dicetuskan terus, dan kemudian timbunan adalah mengembalikan lapisan demi lapisan untuk memaklumkan pengguna bahawa pengecualian telah berlaku, yang turut disertakan dalam try_block Tiada kod yang berkaitan dengan nilai simbol yang direkodkan, jadi kebanyakan orang boleh membuat output yang lebih tepat dan berperikemanusiaan dalam kecuali
黄舟2017-05-18 11:01:04
Gunakan ipython untuk membuka pdb, dan anda boleh melaporkan baris mana yang mempunyai ralat!
ZeropisionError: integer pision or modulo by zero
> <ipython-input-4-a5ac4c0f15ad>(4)<module>()
1
2 a = 1
3 b = 0
----> 4 c = a / b
ipdb>
为情所困2017-05-18 11:01:04
pdb
Tambah kod berikut:
#!/usr/bin/env python
# encoding: utf-8
try:
a = 1
b = 0
c = a / b
except Exception as e:
import pdb; pdb.set_trace() # <-- 加入断点
print(e)
Laksanakan seperti berikut:
❯ 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 a
1
(Pdb) p b
0
(Pdb)