如何修改Python While循环以实现仅接受整数输入、拒绝字符串
问题原因
你当前的代码直接对input()的返回结果调用int()做类型转换,当用户输入非整数字符串时,int()会直接抛出ValueError异常,没有做异常捕获逻辑,所以程序会直接崩溃。
修正方案
可以通过try-except语句捕获类型转换的异常,同时将输入、转换、合法性校验逻辑整合到统一的死循环中,只有输入符合要求才退出循环返回结果,修改后的代码如下:
def addItem(menu, order): while True: # 先获取原始输入内容不直接做int转换 input_content = input('your choice : ') # 捕获类型转换异常 try: itemNo = int(input_content) except ValueError: print('Invalid input, please enter an integer.') continue # 校验退出标识 if itemNo == -1: return itemNo # 校验编号是否在合法可选范围内 if 1 <= itemNo <= len(menu): return itemNo # 编号超出合法范围的提示 print(f'Invalid input, please enter a number between 1 and {len(menu)}, or enter -1 to exit.')
调整说明
- 新增
try-except逻辑捕获ValueError,输入非整数时不会抛出异常,会引导用户重新输入 - 所有输入相关逻辑整合到同一个
while True循环中,消除了原代码重复写输入转换逻辑的冗余问题 - 合法性判断逻辑分层清晰,类型错误、数值范围错误都有对应的提示,用户操作指引更明确
内容的提问来源于stack exchange,提问作者Fidel Hamoud
相关产品推荐
相关产品推荐

