退出Python中的函数

时间:2009-01-15 13:48:52

标签: python exception function

我想在异常发生时离开函数。 我想使用除'return'之外的其他方法

5 个答案:

答案 0 :(得分:17)

如果您发现异常然后想要重新抛出异常,this pattern非常简单:

try:
    do_something_dangerous()
except:
    do_something_to_apologize()
    raise

当然,如果你想首先引发异常,那也很容易:

def do_something_dangerous(self):
    raise Exception("Boo!")

如果那不是您想要的,请提供更多信息!

答案 1 :(得分:4)

异常本身将终止该功能:

def f():
    a = 1 / 0  # will raise an exception
    return a

try:
    f()
except:
    print 'no longer in f()'

答案 2 :(得分:3)

想不出另一种方法来“退出”a)以外的函数返回,b)抛出异常,或c)终止程序的执行。

答案 3 :(得分:2)

假设您要在该方法内“停止”执行。你可以做一些事情。

  1. 不要捕获异常。这会将控制权返回给首先调用它的方法。然后,您可以随心所欲地做任何事情。
  2. sys.exit(0)这个实际上退出整个程序。
  3. 返回我知道你说你不想回来,但是听我说。返回很有用,因为根据您返回的值,这将是让您的用户知道出错的好方法。

答案 4 :(得分:2)

正如其他人所指出的,一个例外会让你退出该方法。你不应该被例外感到羞耻或羞辱;异常表示错误,但这不一定与错误相同。

例如,假设我正在编写一个阶乘函数。因为没有为负数定义因子,所以我可以这样做:

def factorial(n):
  if n < 0:
    raise ValueError
  if n == 0:
    return 1
  return n*factorial(n-1)

然后我会寻找异常:

n = raw_input('Enter a number.')
try:
  print factorial(n)
except ValueError:
  print 'You entered a negative number.'

通过定义我自己的:

,我可以使异常比ValueError更具信息性
class NegativeInputError(Exception):
  pass

# in the function:
if n < 0:
  raise NegativeInputError

HTH!