可以简化嵌套的try除了python中的块

时间:2011-04-19 08:25:16

标签: python try-catch

大家,我的python代码是这样的:

try:
    foo1()
except FooError1:
    try:
        foo2()
    except FooError2:
        dosth()
raise raisesth()

我想知道在python中是否存在对多条件或复合条件的try-except支持,因此我的代码可以简化为:

try:
    foo1() 
    foo2()
except FooError1 and FooError2:
    dosth()
raise raisesth()

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议你阅读python documentation

如果dosthfoo1()foo2()中引发您想要处理的异常,我假设您希望dosth()被调用,就像您的第二个代码块一样。

try:
    foo1() 
    foo2()
except (FooError1, FooError2):
    dosth()
raise raisesth()

正如您在and声明中提出except条件一样,我记得您提出异常必须,只要它加注或执行将停止,您就可以'告诉口译员继续等待FooError2来......

答案 1 :(得分:1)

例外; - )。

def foo1():
    return 1/0

def foo2():
    return s

def do_something():
    print("Yes!")

def exception_and(functions, exceptions, do_something):
        try:
            functions[0]()
        except exceptions[0]:
            if len(functions) == 1:
                do_something()
            else:
                exception_and(functions[1:], exceptions[1:], do_something)

# ================================================================
exception_and([foo1, foo2], [ZeroDivisionError, NameError], do_something)

# Behaves the same as:

try:
    foo1()
except ZeroDivisionError:
    try:
        foo2()
    except NameError:
        do_something()