【问题标题】:TypeError: 'NoneType' object is not iterable using pythonTypeError:“NoneType”对象不能使用 python 进行迭代
【发布时间】:2018-05-01 06:31:56
【问题描述】:

我正在使用 python 处理 210mb 大小的 xml 文件。数据包含 Nonetype 并给出错误“TypeError:'NoneType' object is not iterable”

import xml.etree.ElementTree as etree
nsmap = {}
lis = []
for event, elem in etree.iterparse("data_1.xml", events=('start-ns', 'end-ns'), remove_blank_text=True):
    try:
        print event, elem
        ns, url = elem
    #filter(None, lis)
    except ValueError:
        nsmap[ns] = url
print nsmap


TypeError                                 Traceback (most recent call last)
<ipython-input-23-23b2c0b682e8> in <module>()
      4     try:
      5         print event, elem
----> 6         ns, url = elem
      7     #filter(None, lis)
      8     except ValueError:

TypeError: 'NoneType' object is not iterable

不知道怎么解决。我只想打印数据。即使不使用 try 和 except 方法,它也会显示相同的错误。

【问题讨论】:

    标签: python


    【解决方案1】:

    您捕获的异常是TypeError 而不是ValueError。如果您想捕获异常,请将ValueError 替换为TypeError 或将其留空(以后您将捕获所有 异常)。请注意,您不应尝试在 except 块中使用 nsurl,因为它们是未定义的。

    另一个解决办法是:

    if elem is not None:
        ns, url = elem
        nsmap[ns] = url
    

    【讨论】:

    • 或使用元组except (ValueError, TypeError) as e: ...
    • 确实如此。但是,我看不出它实际上如何引发ValueError(也许我错过了一个微不足道的案例)。
    【解决方案2】:

    None添加支票

    if elem is None:
        continue
    

    或者做任何你想做的事情处理 elemNone 在块内

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多