树莓派Python缩进错误

0 投票
1 回答
1711 浏览
提问于 2025-04-20 08:52

我正在用树莓派和Python制作一个运动传感器。之前我已经成功让它打印“检测到运动!”,但现在我想添加一个功能,让它还能拍照。在这行代码camera = picamera.PiCamera()上,我遇到了缩进错误。如果我把这一行去掉,下一行又会出现缩进错误。这是怎么回事呢?我定义的回调函数只能写一行代码吗?

# coding: utf-8
import RPi.GPIO as GPIO
import picamera
import time

GPIO.setmode(GPIO.BCM)

PIR_PIN = 7

GPIO.setup(PIR_PIN, GPIO.IN)

filename = 0

def MOTION(PIR_PIN):

               print "Motion Detected!"
               camera = picamera.PiCamera()
               filename = 'image' + filenumber + '.jpg'
               camera.capture(filename)
               filenumber = filenumber + 1

print "PIR Module Test (CTRL+C to exit)"

time.sleep(2)

print "Ready"

try:

    GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MOTION)

    while 1:

        time.sleep(100)

except KeyboardInterrupt:

    print " Quit"

    GPIO.cleanup()
    enter code here

1 个回答

2

在查看函数的缩进时,情况是这样的(用\t表示制表符):

def MOTION(PIR_PIN):

               print "Motion Detected!"
\t\t\t   camera = picamera.PiCamera()
\t\t\t   filename = 'image' + filenumber + '.jpg'
\t\t\t   camera.capture(filename)
\t\t\t   filenumber = filenumber + 1

你可以看到,print这一行是用空格缩进的,而其他的行则是先用3个制表符缩进,然后再加3个空格。所以print和后面的行缩进方式不一样,这让Python感到困惑。

在Python中,缩进是很重要的,对于同一级别的缩进,必须完全一致。所以如果你一开始用15个空格缩进,那么整个函数的内容都必须保持这个缩进级别。

总的来说,你一定要保持缩进方式的一致性:要么全用制表符,要么全用空格。不要两者混用,尤其是在同一行中。

撰写回答