varsayalım ben beklenmedik durumları yükselten bir işlevi var, bu yüzden ipdb sarın:Yerel değişkenleri yığın izlemeden nasıl çıkarabilirim?
Ben x ve y değerleri ne olduğunu öğrenmek için yığını yukarı hareket edebilirdef boom(x, y):
try:
x/y
except Exception as e:
import ipdb; ipdb.set_trace()
def main():
x = 2
y = 0
boom(x, y)
if __name__ == '__main__':
main()
vardır: Ancak
$ python crash.py
> /tmp/crash.py(6)boom()
5 except Exception as e:
----> 6 import ipdb; ipdb.set_trace()
7
ipdb> u
> /tmp/crash.py(11)main()
10 y = 0
---> 11 boom(x, y)
12
ipdb> p y
0
ayıklarken, ben sadece en üst düzeyinde bir hata ayıklayıcı koymak istiyorum: Ben Traceback görüntüleyebilir
def boom(x, y):
x/y
def main():
x = 2
y = 0
boom(x, y)
if __name__ == '__main__':
try:
main()
except Exception as e:
import ipdb; ipdb.set_trace()
ama denilen işlevi içinde değişkenleri görüntüleyemezsiniz:
$ python crash.py
> /tmp/crash.py(14)<module>()
12 main()
13 except Exception as e:
---> 14 import ipdb; ipdb.set_trace()
ipdb> !import traceback; traceback.print_exc(e)
Traceback (most recent call last):
File "crash.py", line 12, in <module>
main()
File "crash.py", line 8, in main
boom(x, y)
File "crash.py", line 3, in boom
x/y
ZeroDivisionError: integer division or modulo by zero
ipdb> d # I want to see what value x and y had!
*** Newest frame
Kural dışı durum nesnesi, istisna oluştuğunda yığında açıkça referanslar içerir. Yığının açılmamış olmasına rağmen x
ve y
'a buradan erişebilir miyim?