执行无实际作用语句检测异常是否符合Python编程规范?
回答
首先得说,你这种靠无实际作用的语句触发异常的做法,确实算不上良好的编程规范——PyCharm的提示很合理,这条语句除了可能抛出KeyError外没有任何业务逻辑,读代码的人第一眼会困惑“这行到底要干嘛?”,冗余的无操作语句也会让代码显得不够整洁。
更清晰的替代方案
你可以换几种直观的方式来提前校验输入,既明确意图又不会有IDE警告:
- 显式检查+主动抛异常:
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"
- 用
.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
相关产品推荐
相关产品推荐

