python - 如何处理 IndentationError: 意外缩进
问题描述
我目前正在使用树莓派并使用 DHT11 每秒读取温度和湿度值。我必须将这些值实时保存到数据库中。这是我每秒显示传感器数据的代码。
#!/usr/bin/python
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import csv
import os
dht11_pin = 17
limit_sec = 15 #15 sec
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
sleep_time = 1
instance = dht11.DHT11(pin=dht11_pin)
previous_temperature = 0
previous_humidity = 0
with open('test.csv', 'w', newline='') as csvfile:
field_names = ['Date', 'Time', 'Status', 'Temperature', 'Humidity']
writer = csv.DictWriter(csvfile, fieldnames=field_names)
writer.writerow({'Date': 'Date', 'Time': 'Time','Status': 'Status', 'Temperature': 'Temperature', 'Humidity': 'Humidity'})
try:
print "DHT11 Module Test (CTRL+C to exit)"
print "please wait..."
time.sleep(2)
now = datetime.datetime.now()
print("Ready! "+ now.strftime("%d/%m/%Y") + " / " + now.strftime("%H:%M:%S"))
result = instance.read()
if result.is_valid():
now = datetime.datetime.now()
print("Initial valid input: " + now.strftime("%d/%m/%Y") + " / " + now.strftime("%H:%M:%S"))
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
previous_temperature = result.temperature
previous_humidity = result.humidity
else:
print "Invalid result!"
pass
counter = 0
cnt = 0
while True:
cnt += 1
if cnt%limit_sec == 0 or cnt == 1:
result = instance.read()
if result.is_valid():
if previous_temperature != result.temperature or previous_humidity != result.humidity:
previous_temperature = result.temperature
previous_humidity = result.humidity
counter += 1
rightnow = datetime.datetime.now()
if result.humidity>=40:
status = 'Good condition.'
print(str(counter)+". Last valid input: " )
print("Date: " + rightnow.strftime("%d/%m/%Y"))
print("Time: " + rightnow.strftime("%H:%M:%S"))
print("Status: Your plant is on the good condition.")
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
else:
status = 'Bad condition'
print(str(counter)+". Last valid input: " )
print("Date: " + rightnow.strftime("%d/%m/%Y"))
print("Time: " + rightnow.strftime("%H:%M:%S"))
print("Status: Your plant is on the bad condition. Please open the water supply.")
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
writer.writerow({'Date': rightnow.strftime("%d/%m/%Y"), 'Time': rightnow.strftime("%H:%M:%S"), 'Status': status, 'Temperature':result.temperature, 'Humidity': result.humidity})
else:
print "Invalid result!"
pass
time.sleep(sleep_time)
except KeyboardInterrupt:
print " Quit"
GPIO.cleanup()
当我运行脚本时,我收到以下错误:
使用 open('test.csv', 'w', newline='') 作为 csvfile:
^
IndentationError:意外缩进
解决方案
你有缩进错误try except
,两者应该是相同的缩进
简而言之,它应该是这样的:
imports.....
.
.
.
with open('test.csv', 'w', newline='') as csvfile:
.
.
.
try:
.
.
except:
.
.
(已解决)完整代码:
import RPi.GPIO as GPIO
import dht11
import time
import datetime
import csv
import os
dht11_pin = 17
limit_sec = 15 #15 sec
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
sleep_time = 1
instance = dht11.DHT11(pin=dht11_pin)
previous_temperature = 0
previous_humidity = 0
with open('test.csv', 'w', newline='') as csvfile:
field_names = ['Date', 'Time', 'Status', 'Temperature', 'Humidity']
writer = csv.DictWriter(csvfile, fieldnames=field_names)
writer.writerow({'Date': 'Date', 'Time': 'Time','Status': 'Status', 'Temperature': 'Temperature', 'Humidity': 'Humidity'})
try:
print "DHT11 Module Test (CTRL+C to exit)"
print "please wait..."
time.sleep(2)
now = datetime.datetime.now()
print("Ready! "+ now.strftime("%d/%m/%Y") + " / " + now.strftime("%H:%M:%S"))
result = instance.read()
if result.is_valid():
now = datetime.datetime.now()
print("Initial valid input: " + now.strftime("%d/%m/%Y") + " / " + now.strftime("%H:%M:%S"))
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
previous_temperature = result.temperature
previous_humidity = result.humidity
else:
print "Invalid result!"
pass
counter = 0
cnt = 0
while True:
cnt += 1
if cnt%limit_sec == 0 or cnt == 1:
result = instance.read()
if result.is_valid():
if previous_temperature != result.temperature or previous_humidity != result.humidity:
previous_temperature = result.temperature
previous_humidity = result.humidity
counter += 1
rightnow = datetime.datetime.now()
if result.humidity>=40:
status = 'Good condition.'
print(str(counter)+". Last valid input: " )
print("Date: " + rightnow.strftime("%d/%m/%Y"))
print("Time: " + rightnow.strftime("%H:%M:%S"))
print("Status: Your plant is on the good condition.")
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
else:
status = 'Bad condition'
print(str(counter)+". Last valid input: " )
print("Date: " + rightnow.strftime("%d/%m/%Y"))
print("Time: " + rightnow.strftime("%H:%M:%S"))
print("Status: Your plant is on the bad condition. Please open the water supply.")
print("Temperature: %d C" % result.temperature)
print("Humidity: %d %%" % result.humidity)
print("*******************************************")
writer.writerow({'Date': rightnow.strftime("%d/%m/%Y"), 'Time': rightnow.strftime("%H:%M:%S"), 'Status': status, 'Temperature':result.temperature, 'Humidity': result.humidity})
else:
print "Invalid result!"
pass
time.sleep(sleep_time)
except KeyboardInterrupt:
print " Quit"
GPIO.cleanup()
推荐阅读
- python - Python 循环代码不会与求解器代码一起打印,可能有问题吗?
- python - Python/Spyder - 从自定义包导入时类类型的友好名称
- javascript - Jest 单元测试函数调用第二个返回承诺的函数
- python - 无法打开 Python 上的文件(os.startfile)
- r - 更改行中的字符串组合 df R
- javascript - this.getAttribute() 返回一个对象我如何访问该对象?
- asp.net - GridView 中的 ASP WebForms AutoCompleteExtender 未触发
- javascript - 需要反应 createContext 参数
- command-line - 如何在 Windows 上拆分命令提示符屏幕
- c# - 关闭嵌套表单