Случайно объект NoneType не вызывается ошибкой

1

Недавно у меня есть эта проблема в моем приложении:

Файл "main.py", строка 31, в файле "app.pyc", строка 205, в запуске TypeError: объект "NoneType" не может быть вызван "

Мой код:

xml = EXML()
for pid, product in store.products.items():
    xml.addRow()
    xml.addCell((product['name']).encode('utf-8'), "String")
    xml.addCell((product['symbol']).encode('utf-8'), "String")
    xml.addCell((product['brand_name']).encode('utf-8'), "String") # line 205
    xml.addCell(str(product['price']), "String")

Python 2.7 32-битный

Он подключен, потому что это проявилось после ~ 1000 итераций, без какой-либо проблемы с предиусом. Это приложение сканирует интернет-магазин, чтобы получить текущие цены. Во-первых, я подумал, что где-то я пропустил что-то, и в результате есть None.encode('utf-8'), но нет, и "".encode("utf-8") работает. Более того, я не могу воспроизвести эту ошибку на сайте тестирования, иногда появляется при работе с ~ 2500 продуктами. Какие возможны другие источники этой ошибки?

  • 0
    Я согласен с @Roman. В общем, я считаю хорошей практикой избегать длинных однострочных символов, как в вашем коде: вы вызываете метод для результата функции в результате метода - это сложнее понять, и когда вы сталкиваетесь с ошибкой где-то это значительно сложнее найти. Кроме того, вы можете попробовать запустить приложение с python -i чтобы вызвать интерпретатор после завершения выполнения скрипта, затем import pdb и вызвать pdb.pm() . Это должно открыть сеанс Pdb на вашем последнем отслеживании и позволить вам проверить, что пошло не так.
Теги:

2 ответа

1
>>> None.encode
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'encode'
>>> None()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object is not callable

На данной строке вам нужно будет как-то установить одну из двух функций, вызываемых None. Вы уверены, что это не следующая строка, потому что перезапись str является довольно распространенной ошибкой.

  • 0
    Я уверен, что ул не перезаписан. Я полагаю, что-то плохое случается, когда я обрабатываю urllib2.HTTPException или AttributeError в моем парсере. Я заметил еще одно поведение: в моем скрипте я закрывал дескриптор файла перед чтением, и только иногда это вызывало ошибку.
0

ОК, решил, он бит bizzare, но эта ошибка вызвана product['brand_name'] который иногда является BeautifulSoup.tag (
на этот раз) вместо BeautifulSoup.NavigableString как я и планировал. Я все еще не понимаю, зачем и почему?

Anywat, большое спасибо за ответ. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню