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

Python计分板全局变量问题:RedScore未定义错误排查求助

Troubleshooting the "RedScore is not defined" Error in Your Raspberry Pi Scoreboard

Hey there! Let's figure out why you're running into that NameError: name 'RedScore' is not defined issue after adding momentary switch control to your Python scoreboard. Since your original keyboard-input (raw_input) version worked perfectly, the problem almost certainly stems from how variables are being handled with the new GPIO logic—super common for folks new to Raspberry Pi GPIO and Python scope rules!

Common New Pitfalls to Check

1. Variable Scope Issues (Most Likely Culprit)

When you add GPIO callback functions for your momentary switches, it's easy to accidentally create local variables instead of modifying your global score variables. For example:

# ❌ Wrong: Callback creates a local RedScore instead of using the global one
def red_switch_pressed(channel):
    RedScore += 1  # This tries to create a local variable, not update the global

# ✅ Correct: Use global to tell Python to modify the global variable
def red_switch_pressed(channel):
    global RedScore
    RedScore += 1

If you don't use the global keyword in your callback, Python will think you're defining a new local variable named RedScore inside the function—meaning the RedScore your while loop is trying to access never gets initialized or updated.

2. Missing Initialization Before the Loop

Your original raw_input version probably initialized RedScore at the top of your program, before the main loop. When adding switch logic, it's easy to accidentally move that initialization into a conditional block or function, so the variable doesn't exist when the loop starts.

Make sure you initialize your score variables before any GPIO setup or loops:

# Do this first, right after importing modules
RedScore = 0
BlueScore = 0

# Then set up GPIO, callbacks, etc.
GPIO.setmode(GPIO.BCM)
# ... rest of your GPIO setup

3. Case Sensitivity or Typos

Python is case-sensitive! Double-check that you're using the exact same variable name everywhere. For example, if you initialized redScore (lowercase 'r') but tried to access RedScore (uppercase 'R') in your loop, you'll get this error. Scan every instance of the variable to confirm spelling and case match.

Quick Debugging Tips

  • Add a print statement right before your main while loop to verify the variable exists:
    print(f"Initial Red Score: {RedScore}")
    while True:
        # Your loop logic here
    
    If this line throws the error, you know the variable wasn't initialized properly before the loop.
  • Comment out the GPIO switch logic temporarily and run the program again. If it works without the switches, you can narrow the problem down to how the switch callbacks interact with your score variables.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:50:31