Пример 1:
try:
a()
b()
except:
c()
Здесь b()
будет запускаться только в том случае, если a()
не сгенерировал, но блок исключений также будет отлавливать любые исключения, которые могут быть сгенерированы b()
, которые вы, возможно, не хотите , Общее правило таково: могут происходить только те исключения, которые, как вы знаете, (и способ обработки). Поэтому, если вы не знаете, будет ли выбрасываться b()
, или если вы не сможете сделать ничего полезного, перехватывая исключение, выданное b()
, тогда не помещайте b()
в try:
блок .
Пример 2:
try:
a()
except:
c()
else:
b()
Здесь b()
будет запускаться только в том случае, если a()
не выбрасывает, но любые исключения, которые b()
выбрасывает, здесь не будут обнаружены и будут продолжать распространяться вверх по стеку. Это очень часто то, что вы хотите.
Пример 3:
try:
a()
except:
c()
b()
Здесь b()
всегда запускается, даже если a()
ничего не бросало. Конечно, это тоже весьма полезно.