我正在使用一个系统,它应该使我的一个覆盆子pi GPIO引脚变为高电平约2秒钟。我把它分成两个不同的文件。 “网站”文件(名为app.py)和“GPIO”文件(名为test.ty)。以这种方式请求测试文件:
from flask import Flask, render_template
from test import open_door
app = Flask(__name__)
@app.route('/opendoor')
def openDoor():
open_door()
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
test.py文件如下所示:
import RPi.GPIO as GPIO
import time
testPin = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(testPin, GPIO.OUT)
counter =0
def open_door():
try:
print ("Everthing is fine")
while counter < 900000:
print ("Everything is good")
GPIO.output(testPin, GPIO.HIGH)
counter += 1
except:
print ("Everything is oke!")
finally:
GPIO.cleanup()
我收到消息“一切都很好”,“一切都好!”但不是“一切都好”的信息。在我看来,while循环不会执行。任何人都知道为什么它不起作用?
counter
不在您调用open_door()
的其他文件的范围内,这就是为什么你看到“一切都好!”因为未知变量是一个例外
tl; dr - counter未初始化,因为只调用了该方法。
Python是一种解释器语言。通过从test.py导入open_door,您只需要包含open_door函数中定义的代码。
例如,采取以下两个程序:
把人.朋友:
counter = 0
def count():
while (counter < 5):
print(counter)
counter += 1
foobar.朋友:
from bar import count
count()
收到的输出将是:
py foobar.py
Traceback (most recent call last):
File "foobar.py", line 2, in <module>
sayHey()
File "C:\Temp\bar.py", line 3, in sayHey
while (counter < 5):
UnboundLocalError: local variable 'counter' referenced before assignment
但是,通过将变量定义移动到方法中,我们将获得以下输出:
py foobar.py
0
1
2
3
4
我建议创建一个将变量保存为内部字段并包含open_door方法的类。
把人.朋友:
class MyClass:
def __init__(self):
self.__counter = 0
def count(self, limit):
while (self.__counter < limit):
print(self.__counter)
self.__counter += 1
foobar.朋友:
from bar import MyClass
driver = MyClass()
driver.count(3)
现在:
py foobar.py:
0
1
2
192.168.1.82 - - [15 / Dec / 2017 23:27:42]“GET / deur / open HTTP / 1.1”200 -
这很好用
一切都好!
192.168.1.82 - - [15 / Dec / 2017 23:27:44]“GET / opendoor HTTP / 1.1”500 - 回溯(最近一次呼叫最后):
文件“/usr/lib/python3/dist-packages/flask/app.py”,第1836行,在调用中返回self.wsgi_app(environ,start_response)
文件“/usr/lib/python3/dist-packages/flask/app.py”,第1820行,在wsgi_app response = self.make_response(self.handle_exception(e))
在handle_exception中的文件“/usr/lib/python3/dist-packages/flask/app.py”,第1403行
reraise(exc_type, exc_value, tb)
文件“/usr/lib/python3/dist-packages/flask/_compat.py”,第33行,重新加注价值
文件“/usr/lib/python3/dist-packages/flask/app.py”,第1817行,在wsgi_app response = self.full_dispatch_request()中
在full_dispatch_request中输入文件“/usr/lib/python3/dist-packages/flask/app.py”,第1477行
rv = self.handle_user_exception(e)
在handle_user_exception中的文件“/usr/lib/python3/dist-packages/flask/app.py”,第1381行
reraise(exc_type, exc_value, tb)
文件“/usr/lib/python3/dist-packages/flask/_compat.py”,第33行,重新加注价值
在full_dispatch_request中输入文件“/usr/lib/python3/dist-packages/flask/app.py”,第1475行
rv = self.dispatch_request()
在dispatch_request中输入文件“/usr/lib/python3/dist-packages/flask/app.py”,第1461行
return self.view_functions[rule.endpoint](**req.view_args)
文件“/home/pi/python/Deur/app.py”,第24行,在openDeur中返回render_template('index')
在render_template中输入文件“/usr/lib/python3/dist-packages/flask/templating.py”,第127行
return
_render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
在get_or_select_template中输入文件“/usr/lib/python3/dist-packages/jinja2/environment.py”,第830行
return self.get_template(template_name_or_list, parent, globals)
在get_template中输入文件“/usr/lib/python3/dist-packages/jinja2/environment.py”,第791行
return self._load_template(name, self.make_globals(globals))
在_load_template中输入文件“/usr/lib/python3/dist-packages/jinja2/environment.py”,第765行
template = self.loader.load(self, name, globals)
文件“/usr/lib/python3/dist-packages/jinja2/loaders.py”,第113行,加载源,文件名,uptodate = self.get_source(环境,名称)
在get_source中输入文件“/usr/lib/python3/dist-packages/flask/templating.py”,第64行
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound:index
192.168.1.82 - - [15 / Dec / 2017 23:27:44]“GET / opendoor?
debugger = yes&cmd = resource&f = style.css HTTP / 1.1“200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]“GET / opendoor?
debugger = yes&cmd = resource&f = jquery.js HTTP / 1.1“200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]“GET / opendoor?
debugger = yes&cmd = resource&f = debugger.js HTTP / 1.1“200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]“GET / opendoor?
debugger = yes&cmd = resource&f = console.png HTTP / 1.1“200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]“GET / opendoor?
debugger = yes&cmd = resource&f = source.png HTTP / 1.1“200 -