Как узнать, откуда стоит предупреждение 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 ).

  • Мультииндексный кадр данных из последовательности блоков данных
  • Преобразование столбца объектов даты в Pandas DataFrame в строки
  • Pandas "diff ()" со строкой
  • Довольно печатать новые строки внутри строки в Pandas DataFrame
  • Значение по умолчанию / заполнение для внешних соединений
  • Экспорт кадра данных Pandas с текстовым столбцом, содержащим текст utf-8 и URL-адреса в Excel
  • Преобразование Pandas TimeDelta в целое число
  • rpy2 импорт не работает
  • Python - лучший язык программирования в мире.