我有Python脚本将XML文件解析为另一个平台更友好的格式。
每隔一段时间,其中一个数据文件就不包含任何数据 - 只有编码信息而没有其他标签,这会导致ElementTree在找到它时抛出ParseError。
<?xml version="1.0" encoding="utf-8"?>
在调用ElementTree之前,有没有办法测试空文件?
的Ta。
答案 0 :(得分:1)
你应该在这里请求原谅而不是许可。
通过将代码包装在try/except
块中来处理异常。
import xml.etree.ElementTree as ET
...
try:
tree = ET.parse(fooxml)
except ET.ParseError:
# log error
pass
答案 1 :(得分:0)
当然有几种方法,使用:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="SideBySide"
version="1.0.0.0" />
<clrClass
clsid="{16AD5303-E154-44B4-A72B-C129859714AD}"
progid="SideBySide.SideBySide"
threadingModel="Both"
name="SideBySide.SideBySideClass"
runtimeVersion="v4.0.30319" >
</clrClass>
</assembly>
或使用if语句:
try:
pass # delete this and add your parse code
except:
pass # write your exception when empty
让我知道它是怎么回事!
答案 2 :(得分:0)
当然你可以捕获lxml
引发的异常。如果要避免解析,可以检查文件是否只包含一个<
符号:
with open("input.xml","rb") as f:
contents = f.read()
if contents.count(b"<")<=1:
# empty or only header: skip
pass
else:
x = etree.XML(contents)
当然,这种启发式方法不能防止其他解析错误。因此,最好只保护try/except
块的解析。
但是这种方法的优点是如果你有很多腐败的1行和#34;只有#34;文件。