【发布时间】:2010-10-01 14:23:16
【问题描述】:
我想在发生异常时退出函数。 我想使用'return'以外的其他方法
【问题讨论】:
我想在发生异常时退出函数。 我想使用'return'以外的其他方法
【问题讨论】:
除了 a) 返回、b) 抛出异常或 c) 终止程序的执行之外,想不出其他方法来“退出”函数。
【讨论】:
如果你捕捉到一个异常然后想重新抛出它,this pattern 非常简单:
try:
do_something_dangerous()
except:
do_something_to_apologize()
raise
当然,如果你想提出异常,那也很容易:
def do_something_dangerous(self):
raise Exception("Boo!")
如果这不是您想要的,请提供更多信息!
【讨论】:
异常本身会终止函数:
def f():
a = 1 / 0 # will raise an exception
return a
try:
f()
except:
print 'no longer in f()'
【讨论】:
假设您想在该方法内“停止”执行。您可以做一些事情。
【讨论】:
正如其他人指出的那样,异常会让您退出该方法。你不应该因为例外而感到羞耻或尴尬;异常表示错误,但不一定与错误相同。
例如,假设我正在编写一个阶乘函数。没有为负数定义阶乘,所以我可以这样做:
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!
【讨论】: