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'>