try:
print 1/0
try:
print 2/0
except ZeroDivisionError as e:
print('Error2: %s' % e)
except ZeroDivisionError as e:
print('Error1: %s' % e)
У меня даже Netbeans отказался код парсить и строить иерархию когда вложил один в другой :-) и показал ошибки
try:
print 1/0
try:
print 2/0
except ZeroDivisionError as e:
print('Error2: %s' % e)
except ZeroDivisionError as e:
print('Error1: %s' % e)
try:
print 1/0
except ZeroDivisionError as e:
print('Error1: %s' % e)
try:
print 2/0
except ZeroDivisionError as e:
print('Error2: %s' % e)
paganmindEсли так подумать, то можно просто проверять равен ли знаменатель нулю, т.к. try/except здесь фактически только для этого (хотя, конечно, в реальном коде все может быть сложнее).
Возможно ли реализовать как-то по-другому?
paganmindhttp://docs.python.org/reference/datamodel.html#index-1772
но возникла необходимость для одного и того же типа исключения определить точку, где оно произошло
LexanderВ принципе да, оно, но для разработчика, а не для пользователя.
http://docs.python.org/reference/datamo … index-1772
paganmindИМХО: однозначно нет.
Считается ли хорошем тоном использовать вложенные обработчики исключений?
Tim Peters
Flat is better than nested.
paganmindТогда тем более не нужно распределять try/except по программе. Изначальная проблема - это нехватка данных в выловленном исключении. Создай свой собственный класс с исключением, который будет хранить всю необходимую информацию для интроспекции. Код выполняется в одном основном try/except блоке:
В реальности может быть и исключения получения данных и ошибки ввода/вывода все учесть в условиях не получится
try:
do_work()
except IOError, e:
log.error('Invalid resource ... ')
except MyZeroDivisionError, e:
log.error('Wrong denominator, %s', e.description)
except Exception, e:
log.error('Unknown exception')
log.exception()
sys.exit()
if var == 0:
raise MyZeroDivisionError("Block 1, describe what's wrong")
#или так
try:
complicated_function_with_many_divisions(arg1, arg2)
except ZeroDivisionError, z:
raise MyZeroDivisionError("Block 2, describe what's wrong", z)
ZZZ
ИМХО: однозначно нет.
ZANспасибо. красивое решение.
Изначальная проблема - это нехватка данных в выловленном исключении. Создай свой собственный класс с исключением…..