окончательно заблокирует работу без блока try в python? - PullRequest
0 голосов
/ 13 июля 2020

Если я не укажу ни одного блока try и except в python, будет ли finally работать в программе?

или я могу использовать finally только с блок попытки.

if condition:
   print('something')
else:
   print('something else')
finally:
   print('I will always run')

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Нет, finally используется только с try. Его цель - запустить некоторый код после try и / или любого except блока, независимо от того, вызвал ли код в блоке try исключение. Блок finally выполняется сразу после блока try или except, без задержки до конца программы. См. официальную документацию для более подробного объяснения.

finally полезно, если вам нужно очистить некоторые ресурсы перед продолжением. Например:

f = open('myfile.txt')
try:
    f.write('blabla')  # This might raise an exception, for example if the disk is full
finally:
    f.close() # Close the file whether the write failed or not.

Без finally нам пришлось бы повторить оператор очистки, например:

f = open('myfile.txt')
try:
    f.write('blabla')
except:
    f.close()
    raise
f.close()

В Python это почти всегда лучше использовать блок with вместо try / finally.

Наконец, в вашем примере вы также можете написать:

if condition:
   print('something')
else:
   print('something else')
print('I will always run')
1 голос
/ 13 июля 2020

Нет, это не будет работать вне блока try, потому что finally является частью оператора try, как видно из грамматики Python :

try_stmt: ('try' ':' suite
           ((except_clause ':' suite)+
            ['else' ':' suite]
            ['finally' ':' suite] |
           'finally' ':' suite))

Таким образом, ключевое слово finally может встречаться только в продукте try_stmt, который захватывает операторы try.

...