Wie kann man die Stapelspur debuggen, die eine nachfolgende Ausnahme in Python verursacht?
Posted: 09 Mar 2025, 13:33
Python (und Ipython) verfügt über eine sehr leistungsstarke Debugging-Funktionen nach dem Mortem und ermöglicht eine variable Inspektion und Befehlsausführung in jedem Bereich im Traceback. Die Befehle auf/down -Debugger ermöglichen das Ändern des Frame für die Stapelverfolgung der endgültigen Ausnahme, aber was ist mit der __cause __ dieser Ausnahme, wie durch die Erhöhung ... von ... syntax?
definiert
Gibt es eine Möglichkeit, aus dem Debugger auf Bab zugreifen zu können? Das obige kann auch reproduziert werden, indem der Code in ein Skript testrerr.py und ausgeführt wird und Python -m PDB testerr.py und fortlaufend ausgeführt wird. Nach dem Fehler heißt es < /p>
und gibt einen Debugger an derselben Stelle.
definiert
Code: Select all
Python 3.7.6 (default, Jan 8 2020, 13:42:34)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.11.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: def foo():
...: bab = 42
...: raise TypeError
...:
In [2]: try:
...: foo()
...: except TypeError as err:
...: barz = 5
...: raise ValueError from err
...:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
1 try:
----> 2 foo()
3 except TypeError as err:
in foo()
2 bab = 42
----> 3 raise TypeError
4
TypeError:
The above exception was the direct cause of the following exception:
ValueError Traceback (most recent call last)
in
3 except TypeError as err:
4 barz = 5
----> 5 raise ValueError from err
6
ValueError:
In [3]: %debug
> (5)()
2 foo()
3 except TypeError as err:
4 barz = 5
----> 5 raise ValueError from err
6
ipdb> barz
5
ipdb> bab
*** NameError: name 'bab' is not defined
ipdb> down
*** Newest frame
ipdb> up
*** Oldest frame
Code: Select all
Uncaught exception. Entering post mortem debugging
Running 'cont' or 'step' will restart the program