Python 获取flask web服务器上的内部服务器错误

Python 获取flask web服务器上的内部服务器错误,python,flask,raspberry-pi,Python,Flask,Raspberry Pi,我是raspberry pi和python编码的新手。我正在做一个学校的项目。我已经找了一些教程和例子,但也许我遗漏了一些东西。我想构建一个基于web服务器的gpio控制器。我用的是烧瓶。为了深入讨论这个问题,我从这个例子开始。只需通过刷新页面来打开和关闭led 所以问题是,我在web服务器端看不到响应值。它正在打开和关闭led。但我想在网上看到情况。但我就是不能。我正在获取和内部服务器错误。我将给出python和html代码。你能帮我解决这个问题吗 from flask import Flas

我是raspberry pi和python编码的新手。我正在做一个学校的项目。我已经找了一些教程和例子,但也许我遗漏了一些东西。我想构建一个基于web服务器的gpio控制器。我用的是烧瓶。为了深入讨论这个问题,我从这个例子开始。只需通过刷新页面来打开和关闭led

所以问题是,我在web服务器端看不到响应值。它正在打开和关闭led。但我想在网上看到情况。但我就是不能。我正在获取和内部服务器错误。我将给出python和html代码。你能帮我解决这个问题吗

from flask import Flask
from flask import render_template
import RPi.GPIO as GPIO

app=Flask(__name__)

GPIO.setmode(GPIO.BCM)

GPIO.setup(4, GPIO.OUT)
GPIO.output(4,1)
status=GPIO.HIGH

@app.route('/')
def readPin():
    global status
    global response
    try:
        if status==GPIO.LOW:
            status=GPIO.HIGH
            print('ON')
            response="Pin is high"
        else:
            status=GPIO.LOW
            print('OFF')
            response="Pin is low"
    except:
        response="Error reading pin"

    GPIO.output(4, status)

    templateData= {
        'title' : 'Status of Pin' + status,
        'response' : response
        }

    return render_template('pin.html', **templateData)

if __name__=="__main__":
    app.run('192.168.2.5')
基本上只有这一行在我的html页面上

<h1>{{response}}</h1> 
{{response}

我认为“回应”没有价值。这有什么问题?

您的服务器在尝试创建字典时可能引发异常,因此templateData值将作为空值发送

请注意,在本例中,尝试连接两个不同类型的变量时抛出的TypeError

因此,在尝试组合变量之前,将变量包装在str(status)中会将status变量强制转换为它的字符串

[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = 2
print a + b


[root@cloud-ms-1 alan]# python add.py
Traceback (most recent call last):
  File "add.py", line 6, in <module>
    print a + b
TypeError: cannot concatenate 'str' and 'int' objects


[root@cloud-ms-1 alan]# cat add.py
a = 'one'
b = str(2)
print a + b


[root@cloud-ms-1 alan]# python add.py
one2
[root@cloud-ms-1 alan]#cat add.py
a=‘一’
b=2
打印a+b
[root@cloud-ms-1 alan]#python add.py
回溯(最近一次呼叫最后一次):
文件“add.py”,第6行,在
打印a+b
TypeError:无法连接'str'和'int'对象
[root@cloud-ms-1 alan]#cat add.py
a=‘一’
b=str(2)
打印a+b
[root@cloud-ms-1 alan]#python add.py
第二条

首先,它有助于在调试模式下运行:

app.run(debug=True)

这将帮助您跟踪任何被抑制的错误

接下来,看一看构建标题字符串的行:

'title':'Status of Pin'+Status

如果启用调试模式,那么应该看到int/bool不能隐式转换为str。(Python不知道如何添加字符串和int/bool)

为了解决这个问题,您应该显式地将状态强制转换为字符串:

'title':'Status of Pin'+str(Status)

或者更好:


'title':'Status of Pin:{}'。format(Status)

在黑暗中完成快照-将templateData字典中的'response'值更改为一个值(任意数字或字符串),然后重新加载网页,并查看是否更新了{response}((这是调试的开始))--另外,如果是{response},请注意:D?我注意到你的标题是“Pin状态”+状态,这可能会破坏你的字典。。试试“Pin的状态”+str(状态)?ye h1-h2在我的html页面上是对的实际上:D刚刚在这里写了一个意外错误:D立即编辑哇,这对我很有帮助。非常感谢你。我并没有真正明白这一点。你能解释一下吗。再次非常感谢@Alan这取决于是哪一个解决了你的问题?如果是str(status)起作用,那么这将是因为您试图将字符串值与非字符串类型值连接起来,但通过将其包装在str()中,它将其类型强制转换为类型字符串,以便可以组合它们。这会在尝试创建字典时引发异常,因此返回的render_模板('pin.html',**templateData)实际上被传递了一个空的templateData变量(因此客户端的非值)