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

执行无实际作用语句检测异常是否符合Python编程规范?

回答

首先得说,你这种靠无实际作用的语句触发异常的做法,确实算不上良好的编程规范——PyCharm的提示很合理,这条语句除了可能抛出KeyError外没有任何业务逻辑,读代码的人第一眼会困惑“这行到底要干嘛?”,冗余的无操作语句也会让代码显得不够整洁。

更清晰的替代方案

你可以换几种直观的方式来提前校验输入,既明确意图又不会有IDE警告:

  1. 显式检查+主动抛异常:
try:
    name_input = raw_input("\nEnter someone's name (x to exit): ")
    if name_input == "x":
        print 'Closing'
        break
    name = name_input.title()
    if name not in table_dictionary:
        raise KeyError  # 主动抛出异常,让意图一目了然
    fact = raw_input("What do you want to know about " + name + "?: ")
    fact_key = fact.title()
    print f"{name}'s {fact} is {table_dictionary[name][fact_key]}"
except KeyError:
    print "Error: Invalid input"
  1. 用.get()方法避免异常:
name_input = raw_input("\nEnter someone's name (x to exit): ")
if name_input == "x":
    print 'Closing'
    break
name = name_input.title()
person_data = table_dictionary.get(name)
if not person_data:
    print "Error: Invalid input"
    continue  # 回到输入循环
fact = raw_input("What do you want to know about " + name + "?: ")
fact_key = fact.title()
fact_value = person_data.get(fact_key)
if fact_value is None:
    print "Error: Invalid input"
else:
    print f"{name}'s {fact} is {fact_value}"

这种方式完全不用依赖异常捕获,用显式判断处理无效输入,逻辑更直白。

关于fact无效的覆盖

你说的没错,当前代码确实覆盖了fact无效的场景——当访问table_dictionary[name.title()][fact.title()]时,如果fact的标题形式不在子字典里,同样会抛出KeyError进入异常块,输出错误信息,这部分逻辑是没问题的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:49:31