Как продолжить со следующей строки в блоке попытки Python? - PullRequest
5 голосов
/ 31 октября 2011

1001 *, например *

try:
    foo()
    bar()
except: 
    pass

Когда функция foo вызывает исключение, как перейти к следующей строке (строке) и выполнить ее?

Ответы [ 5 ]

9 голосов
/ 31 октября 2011

Возьмите bar() из блока try:

try:
    foo()
except: 
    pass
bar()

Btw., Остерегайтесь пунктов всеобъемлющего exceptПредпочитайте выборочно перехватывать исключения, которые, как вы знаете, вы можете обрабатывать / игнорировать.

6 голосов
/ 31 октября 2011

Невозможно сделать, если вызов bar находится внутри try -блока.Либо вы должны выполнить вызов за пределами блока try-Кроме, либо использовать else:

try:
    foo()
except:
    pass
else:
    bar()

Если bar также может вызвать исключение, вы должны использовать отдельный try блок для bar.

2 голосов
/ 31 октября 2011

Это не тот способ, которым можно использовать try / кроме блоков. Если bar() должен быть выполнен, даже если foo() завершится неудачно, вы должны поместить каждый в свой блок try / кроме:

try:
  foo()
except:
  pass # or whatever

try:
  bar()
except:
  pass # or whatever
0 голосов
/ 23 августа 2017

Если у вас есть только две функции, foo () bar (), проверьте другие решения. Если вам нужно запустить много строк, попробуйте что-то вроде этого примера:

def foo():
    raise Exception('foo_message')
def bar():
    print'bar is ok'
def foobar():
    raise  Exception('foobar_message')

functions_to_run = [
     foo,
     bar,
     foobar,
]

for f in functions_to_run:
    try:
        f()
    except Exception as e:
        print '[Warning] in [{}]: [{}]'.format(f.__name__,e)

Результат:

[Warning] in [foo]: [foo_message]
bar is ok
[Warning] in [foobar]: [foobar_message]
0 голосов
/ 31 октября 2011

Если вы хотите, чтобы исключения из обеих функций обрабатывались одним и тем же исключением, то используйте внутренний блок try / finally:

try:
    try:
        foo()
    finally:
        bar()
except Exception:
    print 'error'

Если в foo() есть исключение, сначала будет выполнено bar(), а затем исключение.

Однако, как правило, рекомендуется помещать минимальный объем кода в блок try, поэтому лучше всего использовать отдельный обработчик исключений для каждой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...