Как узнать, откуда стоит предупреждение Python

Я все еще новичок в Python, используя Pandas, и у меня есть некоторые проблемы, отлаживающие мой скрипт Python.

У меня есть следующее предупреждающее сообщение:

[...]\pandas\core\index.py:756: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal return self._engine.get_loc(key) 

И не могу найти, откуда он.

После некоторых исследований я попытался сделать это в файле Pandas lib (index.py):

 try: return self._engine.get_loc(key) except UnicodeWarning: warnings.warn('Oh Non', stacklevel=2) 

Но это ничего не изменило в предупреждении.

3 Solutions collect form web for “Как узнать, откуда стоит предупреждение Python”

Вы можете отфильтровать предупреждения для повышения, которые позволят вам отлаживать (например, с помощью pdb):

 import warnings warnings.filterwarnings('error') 

* Фильтр предупреждений можно управлять более мелко (что, вероятно, более уместно), например:

 warnings.filterwarnings('error', category=UnicodeWarning) warnings.filterwarnings('error', message='*equal comparison failed*') 

Несколько фильтров будут последовательно просматриваться. («Записи ближе к фронту списка переопределяют записи позже в списке, если оба соответствуют конкретному предупреждению».)

Вы также можете использовать командную строку для управления предупреждениями:

 python -W error::UnicodeWarning your_code.py 

На странице руководства:

Аргумент -W
Ошибка […] для создания исключения вместо печати предупреждающего сообщения.

Это будет иметь тот же эффект, что и в коде:

 import warnings warnings.filterwarnings('error', category=UnicodeWarning) 

Как уже было сказано в ответе Энди.

Если вы включите ведение журнала на python, то, когда получено исключение, вы можете использовать метод logging.exception для регистрации, когда было обнаружено исключение, – этот метод распечатает красиво отформатированную трассировку стека, которая точно logging.exception вас в коде, где исключение возникла. Дополнительную информацию см. В документе python при регистрации .

 import logging log = logging.getLogger('my.module.logger') try: return self._engine.get_loc(key) except UnicodeWarning: log.exception('A log message of your choosing') 

Кроме того, вы можете получить кортеж, содержащий сведения об исключении в вашем коде, вызвав sys.exc_info() (для этого требуется импортировать модуль sys ).

  • Python: Pandas, текстовый файл в DataFrame
  • Pandas: преобразовать значения столбцов DataFrame в новые индексы и столбцы Dataframe
  • Чтение файла XML XML .xls с помощью pandas
  • Преобразование столбцов в строку в Pandas
  • Подсчет изменений значения в каждом столбце в кадре данных в пандах
  • Pandas groupby суммарная сумма
  • Pandas обновляет выходные дни до ближайшего рабочего дня
  • Как пробовать массив numpy и эффективно выполнять вычисления по каждому образцу?
  • Python - лучший язык программирования в мире.