Попробуйте, кроме пункта с, если, иначе - PullRequest
2 голосов
/ 14 марта 2019

Давайте представим этот код:

    try:
        if condition1 and condition2: # some_exception may happen here
            function1()
        elif condition3 and condition4: # some_exception may happen here
            function2()
        else:
            big
            block
            of
            instructions
    except some_exception:
        big
        block
        of
        instructions

Как видите, я повторяю большой блок инструкций (оба одинаковые).Есть ли способ избежать повторения, но что-то отличное от помещения кода в функцию?

Какая-то другая логика или использование метода finally или другого для попытки?Я просто не могу понять.

Заранее спасибо за помощь!

Ответы [ 2 ]

6 голосов
/ 14 марта 2019

Если вы не хотите использовать функцию, как насчет установки переменной в обоих местах и ​​проверки ее позже?

Примерно так:

do_stuff = False
try:
    if condition1 and condition2: # some_exception may happen here
        function1()
    elif condition3 and condition4: # some_exception may happen here
        function2()
    else:
        do_stuff = True
except some_exception:
    do_stuff = True
    ...

if do_stuff:
    big
    block
    of
    instructions
1 голос
/ 14 марта 2019
try:
    if condition1 and condition2: # some_exception may happen here
        function1()
    elif condition3 and condition4: # some_exception may happen here
        function2()
    else:
         raise some_exception('This is the exception you expect to handle')
except some_exception:
    big
    block
    of
    instructions

А как насчет этого?

Изменен на рейз, как подсказал Кэлвуд

...