2014-01-21 61 views
3

我有两个目标与此try/except声明。如何返回值并引发异常

  1. 如果没有问题发生,则需要return值为1,如果发生任何问题,则需要为0。
  2. 它需要引发异常并结束脚本。

我的return值正在工作。我也有SystemExit()工作。但是在一起,他们没有工作。

我的Python脚本(这是相关的):

except IOError: 
    value_to_return = 0 
    return value_to_return 
    raise SystemExit("FOOBAR") 

据此,完全忽略了raise SystemExit("FOOBAR")线。我如何去获取返回的值,仍然raise SystemExit("FOOBAR")?这对某些人来说可能是初级的,但我实际上遇到了相当多的困难。

+0

如果提高SystemExit,实际上想你的脚本结束,应该在哪里返回值去(脚本结束后,所有的)?或者你想先捕捉异常,返回,做一些错误处理,然后退出? – Nabla

+0

如果你回来,加薪不会发生。无论如何你都无法做到!选择你想要的,退出或返回。 –

+1

只是猜测,但你可能需要返回0,并有*调用者*提高'SystemExit'。在相同的功能中无法实现这两种功能。 – roippi

回答

6

回归和提升是互斥的。

提高SystemExit将结束脚本。一些清理程序可以运行,如果调用者确实想要,他们可以捕获SystemExit并取消它,但大多数情况下,您可以将其视为在那里停止执行。调用者永远不会有机会看到返回值或做任何有意义的事情。

返回意味着您希望脚本继续。继续可能意味着调用者提出SystemExit,或者这可能意味着忽略错误,或者可能意味着其他事情。不管它是什么意思都取决于你,因为你是编写代码的人。

最后,你确定你应该处理这个错误吗?只捕获一个异常,将其变为系统关闭可能不是最有用的行为。这不是一种用户友好的方式来处理问题,它隐藏了从堆栈跟踪中获得的所有有用的调试信息。

0

我想你可能会寻找更多的东西是这样的:

def some_function(): 
    # this function should probably do some stuff, then return 1 if 
    # it was successful or 0 otherwise. 
    pass 

def calling_function(): 
    a = some_function() 
    if a == 1: 
     raise SystemExit('Get the heck outta here!') 
    else: 
     # Everything worked! 
     pass 
1

要退出脚本,并返回一个退出状态,使用sys.exit()

import sys 
sys.exit(value_to_return)