如何实现Python输入超时:用户未输入或未按回车时自动继续执行
实现带超时的用户输入功能
首先修复原代码的几个问题:
- 直接执行
int(user_input)会在输入非数字时抛出异常,需添加异常捕获 - 原判断逻辑
user_input == int(user_input)不成立,字符串与整数无法直接相等,应先尝试转换为整数
下面提供两种实现5秒超时功能的方案:
跨平台方案(推荐)
该方案基于线程和队列实现,支持Windows、Unix/Linux/macOS所有系统:
import threading import queue def get_input_with_timeout(prompt, timeout): input_queue = queue.Queue() def input_thread(): user_input = input(prompt) input_queue.put(user_input) # 启动后台输入线程 thread = threading.Thread(target=input_thread) thread.daemon = True thread.start() # 等待指定时间获取输入,超时返回None try: return input_queue.get(timeout=timeout) except queue.Empty: return None while True: user_input = get_input_with_timeout("enter here=", 5) if user_input is None: print("超时,自动继续执行") continue # 尝试转换为整数并计算 try: num = int(user_input) result = 5 + num print(result) except ValueError: print("输入不是有效整数,继续等待输入") continue
Unix类系统专属方案
该方案基于signal模块实现,代码更简洁,但仅支持Unix/Linux/macOS:
import signal class TimeoutError(Exception): pass def timeout_handler(signum, frame): raise TimeoutError("输入超时") while True: # 设置5秒超时信号 signal.signal(signal.SIGALRM, timeout_handler) signal.alarm(5) try: user_input = input("enter here=") # 输入成功,取消超时 signal.alarm(0) num = int(user_input) result = 5 + num print(result) except TimeoutError: print("超时,自动继续执行") continue except ValueError: print("输入不是有效整数,继续等待输入") continue
内容的提问来源于stack exchange,提问作者Rakesh Mulik
相关产品推荐
相关产品推荐

