y
будет неопределенным, если y = f(x)
выдает любое исключение, которое не является ZError
. Технически, переменная no_errors
действительно означает «нет ZError
s». Вы можете справиться с этим более элегантно, используя блок else
или finally
для определения y
.
Например:
def(x):
no_errors = false
try:
y = f(x)
no_errors = True
except ZError:
no_errors = False
finally:
y = some_default
if no_errors:
do_stuff(y)
else:
do_other_stuff(x)
Кроме того, bool не нужен, так как вы может просто использовать условный характер блоков try / кроме (см. ответ Чепнера)