当前位置:  开发笔记 > 编程语言 > 正文

处理异常后如何从上次尝试的指令继续执行帧?

如何解决《处理异常后如何从上次尝试的指令继续执行帧?》经验,为你挑选了0个好方法。

我想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

在repl.it上阅读整个unittest

笔记

正如ivan_pozdeev在他的回答中指出的那样,这被称为恢复.

进一步的研究之后,我发现Veedrac的回答这个问题使用自定义sys.excepthook异常之前的背景下,行号恢复计划发表lc2817非常有趣.它依赖于Richie Hindle的作品.

背景

代码在从属进程中运行,该进程由父进程控制.任务(真正的功能)写在父级中,后者使用dill传递给从站.我希望一些任务(在slave进程中运行)尝试从父进程中的外部作用域访问变量,我希望slave能够动态地向父进程请求这些变量.

ps:我不希望这种魔法在生产环境中运行.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有