2017-10-12 1 views
1

Sur mon iMac, le débogueur, exécutant un script python défectueux (sur MAC OS Sierra), pointe toujours vers la première ligne de code active comme cause d'une exception, lors du lancement sans débogueur la ligne correcte est identifiée. Est-ce que quelqu'un a une idée de pourquoi cela peut se produire et comment y remédier?python pdb ne donne pas la trace correcte sur les exceptions

Voici un exemple simple avec une exception "File not found":

Le script exception_test.py:

1 # Some dummy lines... 
2 a=1 
3 b=2 
4 c=a+b 
5 # Lines casuing the exception: 
6 with open("filename","r") as fid: 
7  lines=fid.readlines() 

Lorsqu'il est exécuté sans débogueur, comme dans python exception_test.py il donne

Traceback (most recent call last): 
    File "exception_test.py", line 6, in <module> 
    with open("filename","r") as fid: 
IOError: [Errno 2] No such file or directory: 'filename' 

identifiant la ligne correcte, à savoir line6, tandis que python -m pdb exception_test.py et successives c pour continuer les rendements

Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pdb.py", line 1314, in main 
    pdb._runscript(mainpyfile) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pdb.py", line 1233, in _runscript 
    self.run(statement) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/bdb.py", line 400, in run 
    exec cmd in globals, locals 
    File "<string>", line 1, in <module> 
    File "exception_test.py", line 2, in <module> 
    a=1 
IOError: [Errno 2] No such file or directory: 'filename' 
Uncaught exception. Entering post mortem debugging 

indiquant la première ligne active de code, à savoir la ligne 2.

+0

Quel est le nom de votre fichier de code source Python? –

+0

exception_test.py – momme

Répondre

0

Il est plus probable une question de CPython et pdb, pas votre code, pypy pourrait imprimer un numéro de ligne de retraçage correct.

le line_no du frame où l'exception s'est produite n'est pas juste sous -m pdb.

après quelques devinettes et le traçage, je pouvais étroites this path:

sys.settrace(self.trace_dispatch) 
    -> trace_dispatch() -> dispatch_line() -> user_line() -> interaction() 

la vraie cause racine est toujours pas claire.