Python:“NoneType”类型的对象没有len()

2024-10-03 13:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一点问题,我希望stackoverflow的工作人员能帮上忙。在

每当我试图分离一类文档时,总是收到错误消息“NoneType”的对象has no len()。在

完整的回溯是:

C:\>C:\Python27\python.exe C:\Testing\test.py "C:\Testing\IN" "C:\Testing\Outputs" "C:\Testing\Test.csv"

C:\Testing\IN\000001.000001.xml

Traceback (most recent call last):
  File "C:\Testing\test.py", line 46, in <module>
    if len(documentclass)==0:
TypeError: object of type 'NoneType' has no len()

C:\>

代码如下:

^{pr2}$

显然,if len(documentclass)==0返回的是None值。其思想是将None值和0值赋给documentclass-“Unknown”

到目前为止,我已经提出了以下几点,但没有成功。有什么想法吗?在

非常感谢

if documentclass_xml is not None:
                        documentclass = documentclass_xml.find('data').text                       
                    elif documentclassLocal_xml is not None:
                        documentclass = documentclassLocal_xml.find('data').text
                        documentclass = documentclass + "_Local"
if documentclass_xml is None:
                        documentclass = "UNKNOWN"                      
                    elif documentclassLocal_xml is None:
                        documentclass = "UNKNOWN"
                    else:
                        documentclass = ""                        
                    if len(documentclass)==0:
                        documentclass = "UNKNOWN"                
                    print documentclass

Tags: noinpytestnonelenifis
2条回答

回溯告诉您documentclass的值是None。您使用以下命令初始化它:

                if documentclass_xml is not None:
                    documentclass = documentclass_xml.find('data').text                       
                elif documentclassLocal_xml is not None:
                    documentclass = documentclassLocal_xml.find('data').text
                    documentclass = documentclass + "_Local"
                else:
                    documentclass = ""   

因此if的至少一个分支必须将None分配给它。如果节点中没有文本内容,则访问ElementTree节点的text属性将返回None。它必须是条件的第一个分支,否则尝试追加"_Local"将抛出错误。在

^{pr2}$

因此,您正在访问一个空的<data/>节点。在

结果是对DocumentClassGlobal和DocumentClassLocal进行了一些更改。以前,只有在documentclass中有值时才会创建这些对象_xml.查找('data')。文本。现在,这个规则被忽略并且documentclass_xml.查找('data')。文本可以是None值。我做了下面的调整,它做到了。感谢梅吉尔森指出这一点。在

if documentclass_xml is not None and documentclass_xml.find('data').text is not None:
                        documentclass = documentclass_xml.find('data').text                       
                    elif documentclassLocal_xml is not None and documentclass_xml.find('data').text is not None:
                        documentclass = documentclassLocal_xml.find('data').text
                        documentclass = documentclass + "_Local"

相关问题 更多 >