簡體   English   中英

“NoneType”類型的參數不可迭代

[英]argument of type 'NoneType' is not iterable

我正在嘗試在一個特定目錄中打開一個包含一系列 XML 的目錄。
在下面的代碼中,我將遍歷每個 XML 文檔,並設置一些“if 語句”來讀取 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 並且當我運行 if 語句時,它們工作正常。
當我嘗試設置遍歷一系列 XML 時,我遇到了錯誤。
我搜索了這個網站,看看我是否可以最終解決,但所有問題要么與我的不同,要么我不太了解解決方法。

我使用了許多打印行來測試輸出。
一切正常,直到我到達 if 語句然后出現錯誤。

# 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

您會發現 xml 文檔中有許多不包含字符數據(即文本)的元素。 關於 python 的好處之一是 None 在條件中是錯誤的,再加上條件語句短路的知識意味着有一個非常簡單的解決方案可以解決您的問題,請更改行:

if "%begdate%" in element.text:

至:

if element.text and "%begdate%" in element.text:

當沒有文本時,element.text 為 None,也就是 False,然后你甚至不會到達導致錯誤的條件部分。

您給出的錯誤表明您正在迭代的標簽之一不包含文本。
我認為進行該檢查的更好方法是將 if 語句替換為以下之一:

if "%begdate%" == element.text:
    #code goes here...

import re
if re.search("%begdate%", element.text):
    #code goes here...

第一個示例檢查是否相等,第二個示例使用正則表達式查看標記是否包含您的字符串。 我不確定正則表達式如何處理None搜索空間......那個可能會失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM