2009-01-15 1676 views

回答

3

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

+0

c)类是b)的子类:raise SystemExit – jfs 2009-01-17 00:38:50

+0

我更多地指的是终止进程(手动从程序外部?)。虽然好点。 – 2009-01-17 04:33:36

13

如果你发现一个异常,然后要重新抛出,this pattern很简单:

try: 
    do_something_dangerous() 
except: 
    do_something_to_apologize() 
    raise 

当然,如果你想加薪摆在首位的例外,那很容易,太:

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

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

3

例外本身将终止函数:

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

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

假设你想“停止”执行该方法的内部。有几件事你可以做。

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

正如其他人指出的那样,一个例外会让你脱离方法。你不应该因为例外而感到羞愧或尴尬;例外表示错误,但这不一定与错误相同。

例如,假设我正在写一个阶乘函数。阶乘是不是负数定义,所以我可能做到这一点:

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!