Я хотел бы обработать исключение NameError
, введя нужную недостающую переменную в кадр и затем продолжить выполнение из последней попытки.
Следующий псевдокод должен иллюстрировать мои потребности.
def function():
return missing_var
try:
print function()
except NameError:
frame = inspect.trace()[-1][0]
# inject missing variable
frame.f_globals["missing_var"] = ...
# continue frame execution from last attempted instruction
exec frame.f_code from frame.f_lasti
Прочитайте весь unittest на repl.it
Примечания
- Как указано ivan_pozdeev в ответе , это называется возобновление.
- После дополнительных исследований я нашел Veedrac ответ на вопрос Возобновить программу на номер строки в контексте перед исключением с помощью пользовательского sys.excepthook, отправленного lc2817, очень интересно. Он полагается на Richie Hindle work.
Фон
Код работает в подчиненном процессе, который контролируется родителем. Задачи (функции действительно) записываются в родительском, а последние передаются подчиненному устройству с помощью dill. Я ожидаю, что некоторые задачи (работающие в подчиненном процессе) попытаются получить доступ к переменным из внешних областей в родительском элементе, и я хотел бы, чтобы подчиненный запрашивал эти переменные родителям на лету.
p.s.: Я не ожидаю, что эта магия будет работать в рабочей среде.