В моем коде есть обработка вложенных исключений, когда внутренние блоки делают некоторые вещи перед тем, как перевыпустить исключение на верхние уровни.Traceback всегда сообщает номер строки, которая начала обработку исключений.Однако при работе в отладчике пользовательского интерфейса (Pydev / Eclipse) в некоторых случаях он останавливается на внешнем блоке исключений.
Рассмотрим следующий код, например:
import sys
def f(a):
c=5/a
return c
def sub(d):
print("Entered sub(%d)" % d)
try:
print("Entered try @sub")
e = f(d)/(d-1)
return e
except:
print("Do some staff before re-raising the exception upwards")
raise
def main():
try:
print("Entered try @main")
d = int(sys.argv[1])
sub(d)
except:
print("Reached except block @main")
raise
if __name__ == '__main__':
main()
При работе с аргументом =0, исключение вызывается в строке # 4, и отладчик останавливается на этой строке:
Однако при запуске с аргументом = 1 исключение вызывается в строке # 11(как указано в распечатанной трассировке), но отладчик останавливается на строке № 15.
Как только отладчик останавливается в неправильном месте, это очень сложнодля просмотра внутренних переменных и обработки ошибки, особенно когда код в блоке try использует циклы.
В Pydev-> Manage Exceptions я проверил только «приостановить на неперехваченных исключениях».
Существуетфлажок «Пропускать исключения, захваченные в одной и той же функции», которые кажутся связанными (поскольку кажется, что отладчик пропустил первое исключение в подпрограмме и остановился на операторе «повысить», который можно считать другим исключениемption в той же функции, хотя в документации сказано, что она должна повторно вызвать то же самое исключение).
Этот флажок будет недоступен, если я сначала не проверю «Приостановить при обнаруженных исключениях *», но только после его включения.Отладчик застревает и не останавливается нигде ...
Буду признателен за вашу помощь.
-Моше