You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:27:32