2014-09-08 6 views
-1

파이썬으로 라즈베리 파이로 모션 센서를 만들고 있습니다. 나는 "motion Detected!"라고 인쇄하는 것만으로도 효과가 있었지만 지금은 사진 찍기 기능을 추가하고 싶습니다. 줄에 들여 쓰기 오류가 발생했습니다. camera = picamera.PiCamera(). 이 줄을 제거하면 다음 줄에 들여 쓰기 오류가 발생합니다. 여기서 무슨 일이 일어나고있는거야? 내 정의 된 콜백은 1 줄의 코드 일 수 있습니까?파이썬에서 라즈베리 파이에 대한 들여 쓰기 오류

# 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 
+4

공백과 탭을 혼합합니다. [하지 마세요] (http://legacy.python.org/dev/peps/pep-0008/#tabs-or-spaces). –

+0

이것은 파이썬 3이 아닙니다 –

+0

또한 제공 한 코드를 사용하여 오류를 재현 할 수 없습니다 - 정확하게 복사하십시오 : D –

답변

2

MOTION 기능에 대한 들여보고,이 (탭이 \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와 다음 줄은 다른 들여 쓰기를 사용하여 파이썬을 버립니다.

들여 쓰기 수준에서 들여 쓰기 수준에서는 들여 쓰기가 완전히 동일해야합니다. 따라서 15 칸을 먼저 들여 쓰기를한다면, 전체 함수 본문의 레벨을 유지해야합니다.

일반적으로 들여 쓰는 방식은 일관되게 유지해야합니다. 탭을 사용하거나 공백을 사용하십시오. 둘 다 사용하지 말고, 특히 같은 줄에 두지 마십시오.

+0

간단하고 효과적입니다. 덕분에 – user2242044

+3

또는 더 나은 : 절대로 탭을 사용하지 마십시오. 여기서는 새로운 코드이므로 혼동하는 규칙을 사용하지 않아도됩니다. –

+0

@AnttiHaapala 사람들은 원하는대로 자유롭게 사용할 수 있습니다. 이것을 탭 대 공간 토론으로 바꾸지 마십시오. – poke