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

Python程序在树莓派Zero 2上卡住,如何打印最后执行的代码行?

解决Python程序卡住时定位最后执行代码行的方法

方法1:用内置trace模块实时追踪

直接用Python的trace模块运行你的脚本,它会实时打印每一行代码的执行情况,程序卡住时,终端最后输出的那行就是卡住前执行的代码。
运行命令:

python -m trace --trace your_script.py

缺点是输出内容较多,但胜在简单直接,不需要修改代码就能快速定位。

方法2:捕获Ctrl+C信号,打印调用栈

在程序开头添加信号处理逻辑,按下Ctrl+C时自动打印当前的调用栈信息,能清晰看到卡住时的代码调用链和最后执行的行。
把这段代码放在你原有程序的最前面:

import signal
import traceback
import sys

def handle_sigint(signum, frame):
    print("\n程序终止,最后执行的代码调用栈:")
    traceback.print_stack(frame)
    sys.exit(1)

# 注册Ctrl+C信号处理
signal.signal(signal.SIGINT, handle_sigint)

# 下面是你的原有代码
# ...

触发Ctrl+C后,输出的栈信息里,最下方的行就是程序卡住前最后执行的代码位置。

方法3:自定义追踪函数,仅记录最后执行行

如果不想实时输出大量日志,用sys.settrace设置一个追踪函数,只悄悄记录最后执行的代码行,按下Ctrl+C时再打印出来。
代码示例:

import sys
import signal

last_executed_line = None

def trace_calls(frame, event, arg):
    global last_executed_line
    if event == 'line':
        # 记录文件名、行号和函数名
        last_executed_line = f"文件: {frame.f_code.co_filename}, 行号: {frame.f_lineno}, 函数: {frame.f_code.co_name}"
    return trace_calls

def handle_sigint(signum, frame):
    print(f"\n程序终止,最后执行的代码行:{last_executed_line}")
    sys.exit(1)

# 开启代码追踪
sys.settrace(trace_calls)
# 注册Ctrl+C信号处理
signal.signal(signal.SIGINT, handle_sigint)

# 你的原有代码
# ...

这个方法不会干扰程序正常输出,只有终止时才显示关键信息,适合输出敏感或需要精简日志的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:54:16