Python使用ElementTree解析XML修改植物价格报错寻求解决方案
XML价格调整工具报错修复
报错原因
你出现该错误的核心原因是:
- 你使用
wb(二进制写)模式打开输出文件后,直接向文件写入了float类型的百分比变量percent,wb模式仅支持写入字节类型数据,且你的逻辑本身就是错误的:你需要写入的是修改后的整个XML结构,不是单独的百分比数值。
现有代码的其他逻辑问题
- 已经用
ET.parse()将XML文件加载到内存的树结构中,main函数里再次读原文件的操作完全冗余 - 查找植物、计算新价格、更新XML节点、写回文件的逻辑完全割裂,你定义的
change_plant_price函数从未被调用 - 只获取了匹配植物的原价,没有按百分比计算新价格,也没有将新价格更新到XML的PRICE节点中
修复后可运行代码
import xml.etree.ElementTree as ET import sys def main(): # 校验参数数量 if len(sys.argv) != 4: print("使用方法:python xmlparse.py plant_catalog.xml plantName percentChange") return input_file = sys.argv[1] searchName = sys.argv[2] percent = float(sys.argv[3]) # 校验百分比范围符合作业要求 if not (-90 < percent < 100): print("百分比取值范围必须为-90 < percentChange < 100") return # 解析XML文件 tree = ET.parse(input_file) root = tree.getroot() found = False # 遍历查找匹配植物 for plant in root.findall("PLANT"): common_name = plant.find("COMMON").text if common_name == searchName: # 计算新价格,保留两位小数 original_price = float(plant.find("PRICE").text) new_price = round(original_price * (1 + percent / 100), 2) # 更新XML节点价格 plant.find("PRICE").text = str(new_price) found = True print(f"已找到植物{searchName},原价{original_price},调整后价格{new_price}") break if not found: print(f"未找到名称为{searchName}的植物") return # 写入新的XML文件,避免覆盖原文件 output_file = "plant_catalog_output.xml" tree.write(output_file, encoding="utf-8", xml_declaration=True) print(f"修改后的XML已保存到{output_file}") if __name__ == "__main__": main()
运行说明
按照作业要求的格式执行即可,例如:python xmlparse.py plant_catalog.xml "Greek Valerian" -20
执行后会在当前目录生成plant_catalog_output.xml文件,对应植物价格会按要求调整。
内容的提问来源于stack exchange,提问作者Dylformer10
相关产品推荐
相关产品推荐

