如何跳过不含<Data>片段的XML文件以避免程序报错?
首先先修正你代码里的两个基础语法错误:
with open(xml) as data_file语句末尾缺少冒号file_content = data_file.read需要改为file_content = data_file.read()(read是文件对象的方法,必须加括号调用)
针对你遇到的「无标记的文件触发报错」问题,给你两种实用解决方案:
方案一:提前检查标记存在性,跳过不符合条件的文件
这种方式先判断文件内容里是否同时包含<Data和Data>,只有都存在才执行拆分逻辑,避免报错:
import glob path = r"C:\Users\Nathan\Desktop\Test\*.xml" for xml_path in glob.glob(path): with open(xml_path) as data_file: file_content = data_file.read() # 确认文件包含所需的起始和结束标记 if "<Data" in file_content and "Data>" in file_content: xml_part2 = file_content.split("Data>", 1)[0] xml_file = "<Data" + xml_part2 + "Data>" # 这里添加你对xml_file的处理逻辑,比如解析、保存等 else: print(f"跳过文件:{xml_path} - 未找到完整的<Data>标记")
方案二:捕获异常,自动跳过出错的文件
如果想覆盖更多异常场景(比如只存在其中一个标记的情况),可以用try-except捕获IndexError,遇到错误直接跳过当前文件:
import glob path = r"C:\Users\Nathan\Desktop\Test\*.xml" for xml_path in glob.glob(path): with open(xml_path) as data_file: file_content = data_file.read() try: # 执行拆分逻辑 xml_part1 = file_content.split("<Data", 1)[1] xml_part2 = file_content.split("Data>", 1)[0] xml_file = "<Data" + xml_part2 + "Data>" # 处理xml_file的逻辑 except IndexError: print(f"跳过文件:{xml_path} - 标记缺失或格式异常")
两种方案对比
- 方案一更高效,提前过滤不符合条件的文件,不会触发异常
- 方案二更灵活,能处理所有导致split索引越界的情况
内容的提问来源于stack exchange,提问作者Nathan Seiler
相关产品推荐
相关产品推荐

