IndentationError:意外缩进... FRUSTRATING

时间:2017-09-25 02:07:49

标签: python

我是Python脚本的新手,我正在编写一个脚本,当我的Raspberry Pi3达到特定温度时打开一个风扇。我一直试图整天调试我的代码,发现我无法弄清楚是什么问题。这是我的代码:

import os
import sys
import signal
import subprocess
import atexit
import time
from time import sleep
import RPi.GPIO as GPIO

pin = 18
maxTMP = 60

def setup():
 GPIO.setmode(GPIO.BCM)
 GPIO.setup(pin, GPIO.OUT)
 GPIO.setwarnings(False)
 return()

def setPin(mode):
 GPIO.output(pin, mode)
 return()

def exit_handler():
 GPIO.cleanup()

def FanON():
 SetPin(True)
 return()

def FanOFF():
 SetPin(False)
 return()

try:
 setup()
  while True:
   process = subprocess.Popen('/opt/vc/bin/vcgencmd measure_temp',stdout = 
   subprocess.PIPE,shell=True)
   temp,err = process.communicate()
   temp = str(temp).replace("temp=","")
   temp = str(temp).replace("\'C\n","")
   temp = float(temp)
  if temp>maxTMP:
   FanON()
  else:
   FanOFF()
   sleep(5)

finally:
 exit_handler()

这是我的错误:

文件“/home/pi/Scripts/run-fan.py”,第36行     而真:     ^ IndentationError:意外缩进

我试图尽可能地缩进。我需要帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我想以此为前言,你应该使用四个空格来缩进。如果你这样做,那么就会更容易看到像你这里的问题。如果您使用像Spyder或PyCharm这样的IDE,则会有一些设置会自动突出显示缩进问题(无论您想要使用多少空格)。

也就是说,使用当前每个缩进一个空格的缩进方案,您希望用这个替换底部块:

try:
 setup()
 while True:
  process = subprocess.Popen('/opt/vc/bin/vcgencmd measure_temp',stdout =
  subprocess.PIPE,shell=True)
  temp,err = process.communicate()
  temp = str(temp).replace("temp=","")
  temp = str(temp).replace("\'C\n","")
  temp = float(temp)
 if temp>maxTMP:
  FanON()
 else:
  FanOFF()
  sleep(5)

如果您在原始代码中使用了四个空格而不是一个空格,那么它将如下所示:

try:
    setup()
        while True:
            process = subprocess.Popen('/opt/vc/bin/vcgencmd measure_temp',stdout = 
            subprocess.PIPE,shell=True)
            temp,err = process.communicate()
            temp = str(temp).replace("temp=","")
            temp = str(temp).replace("\'C\n","")
            temp = float(temp)
        if temp>maxTMP:
            FanON()
        else:
            FanOFF()
            sleep(5)

这里还有另一个问题,那就是你的while True块目前永远不会退出(也许你想在某处发表break语句。)