类型 'NoneType' 的参数不可迭代
我正在尝试打开一个特定的文件夹,这个文件夹里有一系列的XML文件。
在下面的代码中,我正在逐个处理每个XML文档,并设置一些“如果条件”来读取XML中的文本,找到关键词并替换它们,然后将新文件写入一个新的位置。
当我运行这个脚本时,出现了以下错误:
Traceback info:
File "Z:\ESRI\Python\Test Scripts\ElementTree6.py", line 62, in <module>
if "%begdate%" in element.text:
...
错误信息:
argument of type 'NoneType' is not iterable
我已经把目录硬编码成一个特定的XML文件,当我通过“如果条件”时,它们工作得很好。
问题出现在我尝试设置循环处理一系列XML文件时,这时就出现了错误。
我在这个网站上搜索过,想看看是否能找到解决方案,但所有的问题要么和我的不同,要么我不太理解解决方法。
我使用了很多打印语句来测试输出。
一切都正常,直到我到达“如果条件”,然后就出现了错误。
# Location of XML's
folderPath = r"Z:\data"
# set variable to store files with extension ".xml"
for filename in glob.glob(os.path.join(folderPath, "*.xml")):
fullpath = os.path.join(folderPath, filename)
# find files and split the filename from the directory path
if os.path.isfile(fullpath):
basename, filename2 = os.path.split(fullpath)
#print "Basename = " + basename
#print "Filename = " + filename2
# set variable to store XML structure from xml file
root = ElementTree(file=r"Z:\data\\" + filename2)
#Create an iterator
iter = root.getiterator()
#Iterate
for element in iter:
#print element.text
if "%begdate%" in element.text:
BEGDATE = element.text.replace("%begdate%", BEGDATEPARAM)
element.text = BEGDATE
2 个回答
1
你提到的错误说明你正在遍历的某个标签里面没有文本内容。
我觉得检查这个问题的更好方法是把那个if语句换成下面的其中一个:
if "%begdate%" == element.text:
#code goes here...
import re
if re.search("%begdate%", element.text):
#code goes here...
第一个例子是检查两个东西是否相等,第二个例子则使用正则表达式来判断这个标签里是否包含你的字符串。我不太确定正则表达式在处理None
这种情况时会怎么样……可能会出错。
21
你会发现,在一个xml文档中,有很多元素里面没有任何字符数据(也就是没有文本)。Python的一个好处是,None在条件判断中被视为假。结合条件语句的短路特性,你就能很简单地解决这个问题。只需要把这一行:
if "%begdate%" in element.text:
改成:
if element.text and "%begdate%" in element.text:
当没有文本时,element.text就是None,也就是假,这样你就不会进入导致错误的条件部分了。