You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python XML文件搜索函数失效:硬编码正常转函数后无输出

问题排查与修复

执行方式错误

你用python xmlsearch.py("burningf")调用脚本是完全错误的,Python脚本不支持这种传参方式。下面是两种正确的调用方法:

方法1:在脚本内直接调用函数

在脚本的最后添加以下代码,然后运行python xmlsearch.py:

if __name__ == "__main__":
    xmlsearch("burningf")

方法2:通过命令行参数传值

修改脚本,让它支持从命令行接收搜索词,这样可以灵活查询不同游戏:

import xml.etree.ElementTree as ET
import sys

def xmlsearch(search_query):
    tree = ET.parse('gamelist.xml')
    root = tree.getroot()
    elements = root.findall(".//machine[@name='" + search_query + "']")
    
    for element in elements:
        name = element.get('name')
        desc = element.find('description').text
        year = element.find('year').text
        manf = element.find('manufacturer').text
        print(f"Name: {name}, Description: {desc}, Year: {year}, Manufacturer: {manf}")

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("用法:python xmlsearch.py <游戏名称>")
        sys.exit(1)
    xmlsearch(sys.argv[1])

之后执行python xmlsearch.py burningf就能得到结果。

函数内部的逻辑缺陷

  1. 无匹配时会报错:如果搜索不到对应游戏,循环不会执行,name、desc等变量未定义,最后一行的print会直接抛出NameError。
  2. 只输出最后一个匹配项:原代码的print在循环外面,就算找到多个结果,也只会打印最后一个的信息。

修复后的函数:

def xmlsearch(search_query):
    tree = ET.parse('gamelist.xml')
    root = tree.getroot()
    elements = root.findall(".//machine[@name='" + search_query + "']")
    
    if not elements:
        print(f"未找到名称为'{search_query}'的游戏")
        return
    
    for element in elements:
        name = element.get('name')
        desc = element.find('description').text
        year = element.find('year').text
        manf = element.find('manufacturer').text
        print(f"Name: {name}, Description: {desc}, Year: {year}, Manufacturer: {manf}")

额外的安全优化

原代码用字符串拼接构造XPath查询,如果搜索词里包含单引号,会直接导致XPath语法错误。可以改用更安全的写法:

# 转义搜索词中的单引号
safe_query = search_query.replace("'", "\\'")
elements = root.findall(".//machine[@name='{}']".format(safe_query))

# 或者使用参数化查询(Python 3.8及以上版本支持)
elements = root.findall(".//machine[@name=$query]", {"query": search_query})

内容的提问来源于stack exchange,提问作者JackDebian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:29