假设我有一个连续运行的程序,等待来自具有标准输入的程序的命令。保持等待订单的方法称为"run“using while。
正如您所看到的,当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
时,它是空的。)
发布于 2014-07-13 16:36:37
我不确定这是否能满足您的需要,但是您可以通过在except
块的末尾添加一个空的raise
语句来重新引发正在处理的异常,如下所示。这将导致异常由下一个更高的try/except
块处理(如果有),或者如果没有,则终止程序。
示例:
def a(order):
try:
<some algorithm>
return something
except Exception, error:
stderr.write(error)
stderr.flush()
raise # re-raise exception
发布于 2014-07-14 07:16:50
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()
https://stackoverflow.com/questions/24721065
复制