2011-08-27 68 views
1

最近我有我的应用程序这个问题:随机NoneType对象是不可调用的错误

File "main.py", line 31, in File "app.pyc", line 205, in run TypeError: 'NoneType' object is not callable"

我的代码:

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会话,并允许您检查出错的地方。 – immortal

回答

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

我确信str不会被覆盖。我想在我的解析器中处理urllib2.HTTPException或AttributeError时会发生不好的事情。我注意到更多的行为:在我的脚本中,我在阅读之前关闭了文件句柄,并且只是有时会引发错误。 – HiIAmFromPoland

0

OK,解决了,这是有点的bizzare,但这个错误是由product['brand_name']引起的,有时它是BeautifulSoup.tag
标签这个时候),而不是BeautifulSoup.NavigableString为我策划的。我仍然不明白为什么和wtf?

Anywat,非常感谢您的回复。 :)

相关问题