python IndentationError

Я делаю проект Raspberry Pi, в котором робот обнаружит и RFID-метку, когда он закроется. но у меня, кажется, есть ошибка. Вот мой код:

 import time     
 import MFRC522      
 import signal     
 import socket     
 import RPi.GPIO as GPIO    
 from subprocess import call    

 #RFID   
 MIFAREReader = MFRC522.MFRC522()   

 cardA = [6, 100, 18, 73,57]     
 cardB = [242, 231, 88, 100, 41]   
 cardC = [54, 6, 9, 73, 112]   

 def end_read(signal, frame):    
          global continue_reading     
          continue_reading = False    
          print "Ctrl +C captured, ending read."   
          MIFAREReader.GPIO_CLEEN()   

  signal.signal(signal.SIGINT, end_read) 
 GPIO.setmode(GPIO.BCM)   

 GPIO_TRIGGER = 18   
 GPIO_ECHO = 23   

 MLEFT = 4   
 MRIGHT = 25   
 e1 = 17   
 e2 = 10 

 GPIO.setwarnings(False)   
 GPIO.setup(GPIO_TRIGGER, GPIO.OUT)   
 GPIO.setup(GPIO_ECHO,GPIO.IN)   

 GPIO.output(GPIO_TRIGGER, False)   

 time.sleep(0.5) 

 def sonar(n):   
          GPIO.output(GPIO_TRIGGER,True)   
          time.sleep(0.00001)   
          GPIO.output(GPIO_TRIGGER, False) 

          start = time.time()   

          while GPIO.input(GPIO_ECHO)==0: 
               start = time.time() 

          while GPIO.input(GPIO_ECHO)==1:   
               stop = time.time()   

          elapsed = stop - start  

          distance = elapsed * 34000   

          distance = distance / 2   

          return distance  

 GPIO.setup(MLEFT, GPIO.OUT)   
 GPIO.setwarnings(False)   
 GPIO.setup(MRIGHT, GPIO.OUT)   
 GPIO.setwarnings(False)   
 GPIO.setup(e1, GPIO.OUT)   
 GPIO.setwarnings(False)   
 GPIO.setup(e2, GPIO.OUT)   
 GPIO.setwarnings(False)  
 time(1)   

 while True:   
          continue_reading = True   
          time.sleep(0.3)   
          distance = sonar(0)   
          print distance   
          if(12.9<distance<16.9)   
          GPIO.output(e1, 0)   
          GPIO.output(e2, 0)   
          while continue_reading:
          print "read"    
          (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)   

я получил этот вывод:

print "read"  
    ^
IndentationError: expected an indented block  

Как решить эту проблему? Какие-либо предложения? Мне не удалось найти ошибку идентификации?


person Hairul Hafiq    schedule 06.08.2016    source источник
comment
Сделайте отступ для этой строки (и любых других строк, которые должны находиться внутри этого цикла while).   -  person user94559    schedule 06.08.2016
comment
ой; вы пошли дальше и пометили каждую строку как код вместо того, чтобы отмечать весь код сразу, используя, например, <pre>. Проблема в том, что это очень затрудняет отладку отступов вашего кода, поэтому мы не сможем ответить на этот вопрос, если вы не переформатируете.   -  person Marcus Müller    schedule 06.08.2016


Ответы (1)


Во-первых, вы должны сделать отступ на каждом уровне четырьмя пробелами, см., Например, здесь.

Во-вторых, вы должны делать отступ на один уровень после каждого if, while, for и т. Д. Я предполагаю, что ваш последний блок кода должен выглядеть так:

while True:
    continue_reading = True
    time.sleep(0.3)
    distance = sonar(0)
    print distance
    if(12.9<distance<16.9)
        GPIO.output(e1, 0)
        GPIO.output(e2, 0)
    while continue_reading:
        print "read" 

но очень трудно сказать, каковы ваши точные намерения.

person pathoren    schedule 06.08.2016
comment
Эта строка signal.signal(signal.SIGINT, end_read) имеет неправильный отступ. Кроме того, похоже, что вы используете 8 пробелов для отступов, а не 4. - person Harrison; 07.08.2016