Python 类型错误:'&燃气轮机=';在';浮动';和';字节';
有人能帮我解决这个问题吗?这是我的密码:Python 类型错误:'&燃气轮机=';在';浮动';和';字节';,python,runtime-error,typeerror,Python,Runtime Error,Typeerror,有人能帮我解决这个问题吗?这是我的密码: import RPi.GPIO as GPIO import time import Adafruit_DHT import urllib.request GPIO.setmode (GPIO.BCM) GPIO.setwarnings(False) GPIO.setup (13, GPIO.OUT) GPIO.output(13, 1) def getSensorData(): humidity, temp = Adafruit_DH
import RPi.GPIO as GPIO
import time
import Adafruit_DHT
import urllib.request
GPIO.setmode (GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup (13, GPIO.OUT)
GPIO.output(13, 1)
def getSensorData():
humidity, temp = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 22)
return (float(humidity), float(temp))
baseURL = 'https://mekatronika15.000webhostapp.com/data.php?api_key=%s'
inputURL= 'https://mekatronika15.000webhostapp.com/admin/tes2.php'
try:
while True:
humidity, temp = getSensorData()
humidity = '%.2f' % humidity
temp = '%.2f' % temp
try:
conn = urllib.request.urlopen(baseURL + "&humidity=%s&temp=%s" % (humidity, temp))
conn1 = urllib.request.urlopen(inputURL)
print (conn.read())
conn.close()
status1 = conn1.read()
sleep(20)
except:
print ('exiting.')
print (humidity, temp)
if float(temp) >= status1:
GPIO.output(13, 0)
elif float(temp) <= status1:
GPIO.output(13, 1)
except KeyboardInterrupt:
GPIO.cleanup()
不幸的是,我不熟悉python,所以我被卡住了,我知道在这个应用程序中有许多类似的问题和答案,我尝试了一些,但仍然出现错误。
status1
以字节的形式返回,需要格式化
睡眠前打印(状态1)或使用调试器检查值。我的猜测是,如果你得到更多的回复,你需要将其解包
库requests
是urllib的包装器,通常更易使用,因此不需要所有这些步骤
response = requests.get(url)
response.json # probably has what you need
函数返回一个对象:
导入urllib.request
connection=urllib.request.urlopen(“https://stackoverflow.com/")
类型(连接)#
HTTPConnection
对象(使用语句status1=conn1.read()
调用)在文档中描述如下:
读取并返回响应正文,或最多
下一个amt字节
(强调矿山)
因此,出现类型错误的原因是HTTPConnection.read
返回bytes
,这无法与浮点值相比。您需要将字节
转换为浮点
。如果conn1.read()
只是以字节形式返回一个数字,您可以使用float(status1)
,但我高度怀疑status1
的格式要复杂一点,所以您需要做一些挖掘,以确定您想要从中提取数据的确切内容和方式
您可能希望通过HTML解析器来帮助您提取所需的数据。由于在使用变量之前不需要声明变量,因此在尝试对变量执行操作时需要格外小心
问题是这行status1=conn1.read()
这里,conn1.read()
以字节序列(类似于字符串)的形式返回网页的内容,即源html。将数字与字符序列进行比较是一种未定义的操作;因此,python引发了一个错误
您可以设计一个解析器来检索所需的信息。例如,您可以使用encode()
将字节转换为字符串。然后find()
您想要的status1
的索引。然后,您可以使用子字符串将status1
作为字符串,并最终将其转换为数字。“您可以设计一个解析器来检索所需的信息”,在这种情况下,OP可能更容易使用一个预建的解析器,如标准库中的解析器或BeautifulSoup。@ChristianDean woo nice!我不知道python有内置的解析器。谢谢很高兴我能帮忙!Python以自带电池而闻名。不过,在这方面,我听说BeautifulSoup是两者中的佼佼者。谢谢你的回答,我会试试的!谢谢你的回答,我试试看!谢谢你的回答,我会注意你发送的链接!
response = requests.get(url)
response.json # probably has what you need
import urllib.request
connection = urllib.request.urlopen("https://stackoverflow.com/")
type(connection) # <class 'http.client.HTTPResponse'>