如何实现仅在特定时间段可触发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
相关产品推荐
相关产品推荐

