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

Python 20x4 LCD程序按Ctrl+C触发KeyboardInterrupt时无法执行预设清理代码

为什么你的中断逻辑没生效
  • 你写的if KeyboardInterrupt:完全不是合法的异常捕获逻辑。这个判断的实际作用是检查Python内置的KeyboardInterrupt类对象是否存在,结果永远为真,但根本感知不到你按下Ctrl+C时实际抛出的异常
  • 你没有用try/except结构包裹可能触发中断的代码,当KeyboardInterrupt被抛出时,没有对应代码接住这个异常,程序就会直接终止并打印栈追踪报错
修复方案

只需要把原有无限循环的逻辑用try块包裹,把原来的if判断换成标准的异常捕获分支就行,改完的完整代码可以直接运行:

import drivers
from time import sleep
from datetime import datetime
from subprocess import check_output

display = drivers.Lcd()
display.lcd_backlight(0)
IP = check_output(["hostname", "-I"]).split()[0]
usrinpt = input("Text: ")

while len(usrinpt) > 20:
    print("Too Long")
    usrinpt = input("Text: ")
else:
    display.lcd_backlight(1)
    print("Writing to display")
    try:
        while True:
            display.lcd_display_string(str(datetime.now().time().strftime("%H:%M:%S")), 1)
            display.lcd_display_string(str(IP), 2)
            display.lcd_display_string("____________________", 3)
            sleep(1)
            display.lcd_display_string(str(datetime.now().time().strftime("%H:%M:%S")), 1)
            display.lcd_display_string(str(IP), 2)
            display.lcd_display_string(str(usrinpt), 3)
            sleep(1)
    except KeyboardInterrupt:
        # 按Ctrl+C时执行清理:关闭背光
        display.lcd_backlight(0)
注意要点
  • Python里捕获异常的固定写法是try: 可能抛异常的代码 except 异常类型: 异常处理逻辑,不能直接用if 异常类名:来做判断
  • try块要覆盖所有可能被Ctrl+C打断的代码段,不然异常还是会直接透出来终止程序
  • 程序执行完except里的关背光逻辑后就会正常退出,不会再出现之前的Traceback报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 15:54:04