Pycharm - разбить на любое исключение, но игнорировать StopIteration и ExitGenerator - PullRequest
1 голос
/ 22 апреля 2020

В Pycharm я хотел бы, в режиме отладки, останавливаться на любом исключении, которое входит в мой код, но игнорировать любые исключения, которые генерируются и перехватываются библиотечными функциями.

У Pycharm есть опция в точках останова, называемая Any Exception где вы можете сказать «On Raise» и «Ignore library files», что имеет большое значение, но не игнорирует StopIteration и ExitGenerator, что означает, что он останавливается в конце любого из ваших операторов генератора или yield.

например, в приведенном ниже коде генератор next((x for x in a_list)) генерирует исключение ExitGenerator, которое Pycharm останавливает в режиме отладки, но это фактически перехватывается и обрабатывается библиотечным кодом, поэтому я хочу его игнорировать.

См., например, эту программу

import pandas as pd

try:
    # spurious exception
    a_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    first_item = next((x for x in a_list))
    print(f'first item = {first_item}')

except Exception as e:
    # the program won't go here as the ExitGenerator exception is handled by the standard library
    print(f'got exception from generator : {str(e)}')

try:
    # proper exception from a library
    df = pd.DataFrame(index=[1, 2, 3], data=['a', 'b', 'c'], columns=['letters'])
    # try to access but use the wrong column name to generate an exception
    print(df['non_existent_column'])

except Exception as e:
    # the program will come here as the code tried to access a non-existent column
    print(f'got exception from pandas : {str(e)}')

и в результате отладки получается следующий вывод

Connected to pydev debugger (build 201.6668.115)
Stack: 
    <genexpr>, play.py:6
    <module>, play.py:6
first item = a
Stack: 
    <module>, play.py:17
got exception from pandas : 'non_existent_column'

Process finished with exit code 0

Pycharm сначала перехватывает исключение ложного генератора, которое не достигает моего кода, а затем перехватывает собственное исключение pandas, которое действительно читает мой код Это моя настройка точки останова между прочим

Pycharm Any Exception with Igoore Library Files

Также это из нескольких лет go, похоже, связано Перерыв на все исключения, кроме это остановка итерации или выход генератора

предполагает, что она может быть решена, но не знает, как ее включить.

1 Ответ

1 голос
/ 23 апреля 2020

Обновление

Мне удалось получить кое-что работающее на основе некоторых ответов здесь get-last-exception-in-pdb

Если я добавлю это к условию Pycharm, оно будет игнорировать StopItate и ExitGenerator

not (isinstance(__exception__ , tuple) and len(__exception__)>=1 and __exception__[0] in [StopIteration, GeneratorExit])

with breakpoint condition

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