如何捕获错误并通过让程序b

2024-04-20 12:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个连续运行的程序,等待来自标准输入程序的命令。使用while将一直等待订单的方法称为“run”。你知道吗

你知道吗

如您所见,当run()获得某个顺序时,它们会将该顺序传递给某个函数。你知道吗

当我运行程序时,每次我发出一个可能导致错误的命令(比如:Index error),它就会中断并关闭(显然)

我决定尝试用try/except捕捉错误

def a(order):
    try:
        <some algorithm>
        return something
    except Exception, error:
        stderr.write(error)
        stderr.flush()
def b(order):
    try:
        <some algorithm>
        return something
    except Exception, error:
        stderr.write(error)
        stderr.flush()
def run(order)
    while stdin.notclosed:
        try:
            read stdin
            if stdin==specific order :
                x=a(stdin order)
            else:
                x=b(stdin order)
        except Exception,error:
            stderr.write(error)
            stderr.flush()
run()

但是,给出命令的程序似乎无法读取错误。我的分析师认为,发出命令的程序似乎只在读取命令的程序结束后才开始读取stderr。然而,由于try/catch,程序永远不会结束。不管怎样,有没有办法抓住错误,写出来,然后结束它。(错误可能来自任何函数)

PS:假设你不能修改或读取发出命令的程序。(这是竞争,我之所以这么说,是因为当我访问stderr时,它是空的。)


Tags: run命令程序def错误stderrstdinexception
2条回答

不确定这是否满足您的需要,但是您可以通过在except块的末尾添加一个空的raise语句来重新引发正在处理的异常,如下所示。这将导致异常由下一个更高的try/except块(如果有)处理,或者终止程序(如果没有)

示例:

def a(order):
    try:
        <some algorithm>
        return something
    except Exception, error:
        stderr.write(error)
        stderr.flush()
        raise  # re-raise exception
    def a(order):
        try:
            <some algorithm>
            return something
        except Exception, error:
           import traceback
           trace = traceback.format_exc()
           return trace

    def b(order):
        try:
            <some algorithm>
            return something
        except Exception, error:
           import traceback
           trace = traceback.format_exc()
           return trace

    def run(order)
        while stdin.notclosed:
            try:
                read stdin
                if stdin==specific order :
                    x=a(stdin order)
                else:
                    x=b(stdin order)
                #check if x == trace then sys.exit()
            except Exception,error:
                stderr.write(error)
                stderr.flush()
    run()

相关问题 更多 >