В чем необходимость «еще» в обработке исключений Python? - PullRequest
0 голосов
/ 15 декабря 2018

У меня проблемы с пониманием следующего потока управления.

try:
    # normal execution block
except A:
    # handle exception A
except B:
    # handle exception B
except:
    # handle other exceptions
else:
    # if no exceptions, go here
finally:
    # always do this

Я не понимаю назначение a else в этом контексте.Я пришел из Java, где нет условия else для обработки исключений.

Если у меня есть что написать в части else, я бы предположил, что могу написать это непосредственно за пределами обработки исключений.часть либо.

Итак, в чем же необходимость предложения else в обработке исключений Python?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018
processing = True

try:
    x = might_raise_a_key_error()
    # a
except KeyError:
    ...
else:
    # b
finally:
    processing = False

# c

Если у вас есть фрагмент кода, который 1) зависит от x, 2) вы не хотите обрабатывать except KeyError, но 3) хотите, чтобы его охватывал пункт finally, выполнитеВы помещаете это в # a, # b или # c?

Ответ: # b.

0 голосов
/ 15 декабря 2018

Если мне нужно что-то написать в предложении else, я могу напрямую написать вне части дескриптора исключения.

No.

def with_else(x):    
    try:
        int(x)
    except ValueError:
        print('that did not work')
    else:
        print('that worked!')

def without_else(x):    
    try:
        int(x)
    except ValueError:
        print('that did not work')

    print('that worked!')

Demo:

>>> with_else(1)                                                                                                       
that worked!
>>> without_else(1)                                                                                                    
that worked!
>>> with_else('foo')                                                                                                   
that did not work
>>> without_else('foo')                                                                                                
that did not work
that worked!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...