Python中能否实现Try/Except捕获ValueError,除非输入为'?'?
解决你的Python输入判断问题
嘿,我懂你卡在哪了!你想要实现的是让用户输入年份,非数字就提示重试,但输入?的时候能跳出循环对吧?现在的问题是,当你输入?时,代码里先尝试把输入转成int,这直接就触发错误被except捕获了,根本没机会执行判断?的逻辑——而且原代码里还写错了变量名(用了date而不是输入的内容),这就更没法生效啦。
问题出在哪?
原代码的逻辑顺序错了:你先强行把输入转成整数,这会导致非数字的输入(包括?)直接报错进入except块,完全没机会检查输入是不是?。另外,if date == "?"这里的date初始是None,永远不会等于?,这也是个小bug。
修正后的代码
我们调整一下逻辑顺序,先获取原始输入,先检查是不是?,再尝试转换整数:
while True: # 街道和城市输入,input本身就是字符串,不用再转str street = input('Name of street?: ').title() city = input("In what city?: ").title() while True: # 先保存原始输入,不着急转int year_input = input("Date of event? (or '?' to exit): ") # 优先检查退出符 if year_input == '?': print("Exiting year input...") break # 再尝试转换为整数 try: year = int(year_input) print(f"Got valid year: {year}") # 转换成功就跳出内层循环,继续后续逻辑 break except ValueError: # 只捕获转换失败的错误,不要用Exception(会捕获所有意外错误) print("That's not a valid year, try again!") # 如果用户输入了?,可以选择退出整个循环或者继续 if year_input == '?': break
关键调整点
- 先拿原始输入:先把用户输入的内容存在
year_input里,这样能先判断是不是?,避免提前触发转换错误。 - 精准捕获错误:用
ValueError代替Exception,只捕获整数转换失败的情况,不会误判其他意外错误(比如用户按Ctrl+C中断程序)。 - 修正变量错误:原代码里的
date是多余的,直接检查我们保存的原始输入即可。
这样调整后,输入?就能正常触发退出逻辑,非数字的输入会提示重试,数字输入则会成功转换为整数啦。
内容的提问来源于stack exchange,提问作者EasyC
相关产品推荐
相关产品推荐

