随机出现的NoneType对象不可调用错误

2 投票
2 回答
1411 浏览
提问于 2025-04-17 00:26

最近我在我的应用程序中遇到了一个问题:

文件 "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个产品时偶尔会出现。 那么,这个错误可能还有哪些其他来源呢?

2 个回答

0

好的,问题解决了,虽然有点奇怪,但这个错误是因为 product['brand_name'] 有时候会变成 BeautifulSoup.tag(这次是
标签),而不是我预期的 BeautifulSoup.NavigableString。我还是不明白为什么会这样,真是让人困惑。

无论如何,非常感谢你的回复。:)

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这个东西覆盖掉是个很常见的错误。

撰写回答