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

如何实现仅在特定时间段可触发KeyboardInterrupt异常?

问题原因

Python的except关键字后只能接异常类/异常类组成的元组,不能放自定义逻辑判断表达式。你写的time.time()%60>30 and KeyboardInterrupt会先计算time.time()%60>30的布尔值,当该值为False时,整个表达式结果就是布尔值False,不属于继承自BaseException的异常类,所以直接触发你遇到的类型错误。

最简解决方案

你只需要把时间判断逻辑放到KeyboardInterrupt的捕获块内部即可,不符合触发条件时把异常重新抛出就行:

import time

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    # 仅在当前分钟的30秒之后才响应中断
    if time.time() % 60 > 30:
        print("exited")
    else:
        # 不符合时间条件就把异常原样抛出,不做拦截处理
        raise

上述代码的实际效果和你的需求完全一致:当前分钟0-30秒触发Ctrl+C时,程序会正常抛出KeyboardInterrupt中断运行;30-60秒触发Ctrl+C时,会打印exited后正常退出。

内容的提问来源于stack exchange,提问作者algo_trader_1995

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:05