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

如何实现Python条件装饰器,切换Raspberry Pi模拟器与真机运行模式

错误原因

你遇到的unexpected unindent报错由两个语法问题共同导致:

  • Python规定@装饰器语法必须紧跟在被装饰的函数/类定义之前,不能单独出现在代码块末尾。你的写法中@circuit.run后直接接else分支,不符合语法规则,触发解析错误。
  • 代码执行顺序错误:你在else分支调用main()时,def main()的定义还未执行,运行时也会触发变量未定义错误。
实现方案

利用装饰器本质是高阶函数的特性,不用@语法糖,直接手动调用run方法包装业务函数,同时调整代码顺序即可实现单开关切换需求,代码示例如下:

import json
from json import load

# 模式开关:True=模拟器模式,False=真实树莓派模式
simulation = True

def main():
    # 所有业务逻辑全部写在此处,两种模式共用无需修改
    # 你的原有代码直接粘贴进来即可
    pass

if simulation:
    # 模拟器模式初始化逻辑
    from tkgpio import TkCircuit
    with open("EMSSimV8.json", "r") as file:
        configuration = load(file)
    circuit = TkCircuit(configuration)
    # 调用模拟器run方法执行业务函数,等价于原来的@circuit.run装饰器效果
    circuit.run(main)
else:
    # 真实硬件模式直接执行业务函数
    main()

修改后你仅需调整simulation变量的布尔值,即可在两种模式间无缝切换,无需修改其他业务代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:39:03