В моем коде Python у меня есть эта строка:
try:
result = eval(command, self.globals, self.locals)
except SyntaxError:
exec(command, self.globals, self.locals)
Переменная command
может быть любой строкой.Следовательно, отладчик Python pdb
может быть запущен в eval
/ exec
и оставаться активным, когда возвращается eval
/ exec
.Что я хочу сделать, это убедиться, что нормальное выполнение программы возобновляется при возврате из eval
/ exec
.Чтобы просто дать вам представление, это примерно то поведение, которое я хочу:
try:
result = eval(command, self.globals, self.locals)
try: self.globals['pdb'].run('continue')
except: pass
except SyntaxError:
exec(command, self.globals, self.locals)
try: self.globals['pdb'].run('continue')
except: pass
Однако строка try
отображается в отладчике перед его выполнением, но я не хочу, чтобы отладчик показывал мойкод вообще.Кроме того, это на самом деле не работает ... Причина, по которой я повторяю код, состоит в том, чтобы минимизировать отладку в моем коде, иначе я мог бы просто сделать это после блока except
.
Так, как я могу сделатьthis?
В качестве идентификатора:
Если вы попытаетесь ввести следующие строки в интерпретаторы IPython или bpython, вы увидите, что у них та же проблема, и выспособны войти в их код.
import pdb
pdb.set_trace()
next
Однако, если вы сделаете это в стандартном интерпретаторе cpython, вы вернетесь в приглашение python.Причина этого, очевидно, в том, что два первых реализованы на python, а последний - нет.Но я хочу, чтобы поведение было таким же, даже когда весь код написан на Python.