Python输入字符串为何需两次输入才触发错误提示?代码咨询
问题分析与修复:输入字符串时需要两次输入的原因
问题根源
你遇到的两次输入问题,核心出在try-except代码块里:
try: answer = int(input()) except ValueError: answer = input() # 这里就是问题所在!
当你输入非数字字符串(比如abc)时,程序的执行流程是这样的:
- 第一次执行
int(input()),程序等待你输入内容,你输入abc后,因为无法转换成整数,触发ValueError,进入except块。 - 进入
except后,你又调用了一次input(),这会让程序再次暂停等待你输入,这次输入的内容才会被赋值给answer。 - 直到你完成第二次输入,程序才会走到后续的判断逻辑,输出错误提示。
简单来说:第一次输入被try里的input()消耗了,但因为转int失败没完成赋值;except里又强制让你再输入一次,才完成answer的赋值,所以必须输入两次才能触发错误提示。
修复方案
只需要修改except块,不要再调用input(),直接给answer一个能触发错误提示的取值即可。比如:
import sys while True: print('Welcome to the world of Daareven.') print('1 - New game, 2 - Exit') # 修改后的try-except块 try: answer = int(input()) except ValueError: answer = "" # 赋值为字符串,让后续判断捕获错误 # 优化判断逻辑,覆盖更多非法输入场景 if isinstance(answer, str) or answer not in (1, 2): print('Wrong input, please try again') continue elif answer == 1: print('Great, let\'s begin') break elif answer == 2: print('See you soon!') sys.exit()
修改后,当你输入非数字字符串时:
try里的input()获取到你的输入,转int失败触发except。answer被赋值为空字符串,直接进入后续判断。- 程序立刻输出错误提示,不需要第二次输入。
另外小建议:用isinstance(answer, str)比type(answer) is str更灵活,能兼容子类场景;判断条件改成answer not in (1,2),可以同时覆盖大于2、小于1的非法数字输入。
内容的提问来源于stack exchange,提问作者Szakins
相关产品推荐
相关产品推荐

