2016-03-07 10 views
7

Dlaczego nie mogę zdefiniować nowych funkcji po uruchomieniu pdb?Jak zdefiniować nową funkcję w pdb

Na przykład wziąć myscript.py:

#!/gpfs0/export/opt/anaconda-2.3.0/bin/python 
print "Hello World" 
print "I see you" 

Jeśli biegnę python -m pdb myscript.py i starają się interaktywnie zdefiniować nową funkcję:

def foo(): 

pojawia się błąd:

*** SyntaxError: unexpected EOF while parsing (<stdin>, line 1) 

Dlaczego to?

+1

użyć 'ipdb' zamiast wsparcia dla wielowierszowego – wim

Odpowiedz

5

Można zdefiniować swoją funkcję w oświadczeniu jednego wiersza przy użyciu ; zamiast wcięcia, na przykład:

(Pdb) def foo(): print 'Hello world'; print 'I see you' 
(Pdb) foo() 
Hello world 
I see you 
9

Nie sądzę, że obsługuje on wieloliniowy sygnał wejściowy. Możesz obejść, tworząc sesję interaktywną z poziomu pdb. Po zakończeniu sesji interaktywnej zamknij ją za pomocą Ctrl + D.

>>> import pdb 
>>> pdb.set_trace() 
(Pdb) !import code; code.interact(local=vars()) 
(InteractiveConsole) 
In : def foo(): 
...:  print 'hello in pdb' 
...: 
In : # use ctrl+d here to return to pdb shell... 
(Pdb) foo() 
hello in pdb 
Powiązane problemy