gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:02:53 25 4
gpt4 key购买 nike

我遇到了一些问题,希望 stackoverflow 的工作人员能够提供帮助。

每当我尝试分离一类文档时,我都会收到错误消息“NoneType”类型的对象没有 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:\>

代码如下:

import csv, sys, os
import shutil
import xml.etree.ElementTree as ET


if __name__ == '__main__':
if not (len(sys.argv) == 4):
print 'USAGE: %s inFolder OutFolder csvFile' % (sys.argv[0])
else:
inFolder = sys.argv[1]
outFolder = sys.argv[2]
className = sys.argv[3]

count = 0
for fileName in os.listdir(inFolder):
if fileName.endswith(".pdf"):
baseName = fileName.split('.pdf')[0]
pdfFile = inFolder+"\\"+baseName+".pdf"
xmlFile = inFolder+"\\"+baseName+".xml"
validatedXmlFile = inFolder+"\\"+baseName+".xml.validated.xml"
xmlSize = os.path.getsize(xmlFile)
pdfSize = os.path.getsize(pdfFile)
if xmlSize>0 and pdfSize>0:
print
print xmlFile
count = count + 1
tree = ET.parse(xmlFile)
root_xml = tree.getroot()
form_xml = root_xml[0]
#form_xml = root_xml[1]
documentclass_xml = form_xml.find('DocumentClassGlobal')
documentclassLocal_xml = form_xml.find('DocumentClassLocal')
#documentclass_xml = form_xml.find('SSMClassID')
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 len(documentclass)==0:
documentclass = "UNKNOWN"
print documentclass

if documentclass == className:
if not os.path.exists(outFolder + "\\" + documentclass):
os.makedirs(outFolder + "\\" + documentclass)
inBaseFile = inFolder + "\\"+baseName
outBaseFile = outFolder + "\\" + documentclass+"\\"+baseName
inFile = inBaseFile+".pdf"
outFile = outBaseFile+".pdf"
print inFile
print outFile
shutil.copy(inBaseFile+".pdf", outBaseFile+".pdf")
shutil.copy(inBaseFile+".pdf.conf.xml", outBaseFile+".pdf.conf.xml")
shutil.copy(inBaseFile+".pdf.multi.txt", outBaseFile+".pdf.multi.txt")
shutil.copy(inBaseFile+".pdf.txt", outBaseFile+".pdf.txt")
#shutil.move(inBaseFile+".wdb", outBaseFile+".wdb")
shutil.copy(inBaseFile+".xml", outBaseFile+".xml")
if os.path.exists(inBaseFile+".xml.validated.xml"):
shutil.copy(inBaseFile+".xml.validated.xml", outBaseFile+".xml.validated.xml")
if os.path.exists(inBaseFile+".xml.validationinfo.xml"):
shutil.copy(inBaseFile+".xml.validationinfo.xml", outBaseFile+".xml.validationinfo.xml")


print '%d files found and copied.' % (count)

显然,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

最佳答案

回溯告诉您 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到它。访问text ElementTree 的属性节点将返回 None如果节点中没有文本内容。它必须是条件的第一个分支,否则会尝试附加 "_Local"会抛出错误。

>>> data = ET.fromstring('<test/>')
>>> data.text is None
True

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

关于Python:类型 'NoneType' 的对象没有 len(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34296735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com