Можно ли упростить вложенную попытку кроме блока в python - PullRequest
2 голосов
/ 19 апреля 2011

каждый, мой код на Python выглядит примерно так:

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

Интересно, есть ли в python поддержка поддержки нескольких условий или составных условий, поэтому мой код можно упростить как:

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 апреля 2011

Исключение и ; -).

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()
1 голос
/ 19 апреля 2011

Предлагаю вам прочитать документацию по питону .

Полагаю, вы хотите, чтобы dosth вызывался, если foo1() или foo2() вызывают исключение, которое вы хотите обработать в dosth(), как во втором блоке кода.

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

Как вы можете задать условие and в вашем выражении except, я помню, что вы исключение должно быть обработано, как только оно произойдет, или выполнение остановится, чтобы вы не могли сказать переводчику иди вперед в ожидании FooError2 ...

...