使用Python 3.6在PyCharm中构建个人助理遇阻求助
解决Python个人助理开发中WolframAlpha与Wikipedia集成的常见问题
嘿,我看你正在用Python 3.6和PyCharm搭建个人助理,还集成了WolframAlpha和Wikipedia库——这想法超棒!从你贴的代码片段来看,应该是卡在了异常处理或者功能完善的环节,我来帮你梳理下常见问题,再给你一份修正后的可运行代码。
首先先指出你当前代码里的几个小问题:
- 每次输入问题都重新初始化WolframAlpha客户端,这会浪费资源,应该把客户端创建移到循环外面
- 缺少异常处理逻辑:如果WolframAlpha找不到对应结果,程序会直接报错,没法fallback到Wikipedia查询
- 没有退出机制,循环会一直运行,没法正常终止程序
下面是修正后的完整代码,我加上了详细注释:
import wolframalpha import wikipedia # 初始化WolframAlpha客户端(只需要做一次,别放循环里) app_id = "你的APP ID CODE" # 替换成你的真实ID client = wolframalpha.Client(app_id) print("你可以输入问题进行查询,输入'exit'或'quit'退出程序") while True: question = input("Q: ") # 处理退出指令 if question.lower() in ["exit", "quit"]: print("再见!") break try: # 先尝试用WolframAlpha查询(适合计算、事实类问题) res = client.query(question) answer = next(res.results).text print(f"A: {answer}") except StopIteration: # 如果WolframAlpha没找到结果,fallback到Wikipedia try: # Wikipedia查询会返回摘要内容 wiki_summary = wikipedia.summary(question, sentences=2) print(f"A: {wiki_summary}") except wikipedia.exceptions.DisambiguationError as e: # 遇到歧义页面(比如"Apple"既指公司又指水果),提示用户更具体的问题 print(f"A: 这个关键词有多个含义,请更具体一点,比如:{e.options[:3]}") except wikipedia.exceptions.PageError: # Wikipedia也找不到对应页面 print("A: 抱歉,我暂时无法回答这个问题") except Exception as e: # 捕获其他未知异常 print(f"A: 出错了,错误信息:{str(e)}")
再给你拆解下关键改进点:
- 客户端初始化优化:把WolframAlpha的
client创建移到循环外,避免每次提问都重新建立连接,提升运行效率 - 异常分层处理:
- 先捕获WolframAlpha的
StopIteration异常(当没有查询结果时会触发) - 然后处理Wikipedia的两种常见异常:歧义页面和页面不存在
- 最后用通用异常捕获兜底,避免程序崩溃
- 先捕获WolframAlpha的
- 退出机制:添加了
exit/quit指令,让程序可以正常终止 - 用户友好提示:每个场景都给出清晰的反馈,比如歧义提示、无结果提示
你可以把这段代码替换你原来的片段,记得把app_id换成你自己的WolframAlpha密钥,然后测试不同类型的问题:比如数学题(WolframAlpha擅长)、人物/事件百科(Wikipedia擅长),看看是不是符合预期。
内容的提问来源于stack exchange,提问作者Andrea Foderaro




