Отладка Python в Eclipse Stop на внешнем, кроме блока - PullRequest
0 голосов
/ 02 января 2019

В моем коде есть обработка вложенных исключений, когда внутренние блоки делают некоторые вещи перед тем, как перевыпустить исключение на верхние уровни.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, и отладчик останавливается на этой строке: Correct exception trapping

Однако при запуске с аргументом = 1 исключение вызывается в строке # 11(как указано в распечатанной трассировке), но отладчик останавливается на строке № 15.

Wrong exception trapping

Как только отладчик останавливается в неправильном месте, это очень сложнодля просмотра внутренних переменных и обработки ошибки, особенно когда код в блоке try использует циклы.

В Pydev-> Manage Exceptions я проверил только «приостановить на неперехваченных исключениях».
Существуетфлажок «Пропускать исключения, захваченные в одной и той же функции», которые кажутся связанными (поскольку кажется, что отладчик пропустил первое исключение в подпрограмме и остановился на операторе «повысить», который можно считать другим исключениемption в той же функции, хотя в документации сказано, что она должна повторно вызвать то же самое исключение).
Этот флажок будет недоступен, если я сначала не проверю «Приостановить при обнаруженных исключениях *», но только после его включения.Отладчик застревает и не останавливается нигде ...

Буду признателен за вашу помощь.

-Моше

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