Python异常处理修改咨询:实现三个数值全部输入后再校验合法性
问题原因
原代码将三个输入转换逻辑全部放在同一个try代码块中,只要任意一步触发ValueError异常,程序会直接跳出try块执行异常分支,后续的输入语句不会被执行,因此无法完成三个输入的收集。
解决方案
你可以为每个输入单独设置异常捕获逻辑,用一个全局标记记录是否存在输入错误,全部输入完成后再统一判断处理:
def main(): # 初始化错误标记,默认无错误 has_error = False try: num1 = int(input("Enter in Number 1: ")) except ValueError: # 输入非法时标记错误 has_error = True try: num2 = int(input("Enter in Number 2: ")) except ValueError: has_error = True try: num3 = int(input("Enter in Number 3: ")) except ValueError: has_error = True if has_error: print("One of your inputs are wrong!") else: print("The answer is ", num1 + num2 + num3) if __name__ == "__main__": main()
优化写法(可选)
如果后续需要扩展更多输入项,可以把输入逻辑封装成公共函数,减少重复代码:
# 封装输入校验函数,返回转换后的数值和是否校验成功的标记 def get_valid_number(prompt): try: return int(input(prompt)), True except ValueError: return None, False def main(): num1, valid1 = get_valid_number("Enter in Number 1: ") num2, valid2 = get_valid_number("Enter in Number 2: ") num3, valid3 = get_valid_number("Enter in Number 3: ") # 只要有一个校验失败就输出错误 if not all([valid1, valid2, valid3]): print("One of your inputs are wrong!") else: print("The answer is ", num1 + num2 + num3) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者techie Ryan
相关产品推荐
相关产品推荐

