我正在使用一个系统,它应该使我的一个覆盆子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()
我收到消息&#34;一切都很好&#34;和#34;一切都好!&#34;但不是信息&#34;一切都很好&#34;。在我看来,while循环不会执行。 有谁知道为什么它不起作用?
答案 0 :(得分:3)
counter
不在您调用open_door()
的其他文件的范围内,这就是您看到“一切都好!”的原因。因为未知变量是一个例外
答案 1 :(得分:1)
tl; dr - counter未初始化,因为只调用了该方法。
Python是一种解释器语言。通过从test.py导入open_door,您只需要包含open_door函数中定义的代码。
例如,请执行以下两个程序:
bar.py:
counter = 0
def count():
while (counter < 5):
print(counter)
counter += 1
foobar.py:
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方法的类。
bar.py:
class MyClass:
def __init__(self):
self.__counter = 0
def count(self, limit):
while (self.__counter < limit):
print(self.__counter)
self.__counter += 1
foobar.py:
from bar import MyClass
driver = MyClass()
driver.count(3)
现在:
py foobar.py:
0
1
2
答案 2 :(得分:-1)
192.168.1.82 - - [15 / Dec / 2017 23:27:42]&#34; GET / deur / open HTTP / 1.1&#34; 200 -
这很好用
一切都好!
192.168.1.82 - - [15 / Dec / 2017 23:27:44]&#34; GET / opendoor HTTP / 1.1&#34; 500 - 回溯(最近一次调用最后一次):
文件&#34; /usr/lib/python3/dist-packages/flask/app.py",第1836行,致电 return self.wsgi_app(environ,start_response)
文件&#34; /usr/lib/python3/dist-packages/flask/app.py" ;,第1820行,在wsgi_app中 response = self.make_response(self.handle_exception(e))
文件&#34; /usr/lib/python3/dist-packages/flask/app.py",第1403行,在handle_exception中
reraise(exc_type, exc_value, tb)
文件&#34; /usr/lib/python3/dist-packages/flask/_compat.py" ;,第33行,重新加入 提高价值
文件&#34; /usr/lib/python3/dist-packages/flask/app.py" ;,第1817行,在wsgi_app中 response = self.full_dispatch_request()
File&#34; /usr/lib/python3/dist-packages/flask/app.py" ;,第1477行,在full_dispatch_request中
rv = self.handle_user_exception(e)
文件&#34; /usr/lib/python3/dist-packages/flask/app.py",第1381行,在handle_user_exception中
reraise(exc_type, exc_value, tb)
文件&#34; /usr/lib/python3/dist-packages/flask/_compat.py" ;,第33行,重新加入 提高价值
文件&#34; /usr/lib/python3/dist-packages/flask/app.py" ;,第1475行,在full_dispatch_request中
rv = self.dispatch_request()
文件&#34; /usr/lib/python3/dist-packages/flask/app.py",第1461行,在dispatch_request中
return self.view_functions[rule.endpoint](**req.view_args)
文件&#34; /home/pi/python/Deur/app.py",第24行,在openDeur中 return render_template(&#39; index&#39;)
文件&#34; /usr/lib/python3/dist-packages/flask/templating.py",第127行,在render_template中
return
_render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
文件&#34; /usr/lib/python3/dist-packages/jinja2/environment.py",第830行,在get_or_select_template中
return self.get_template(template_name_or_list, parent, globals)
文件&#34; /usr/lib/python3/dist-packages/jinja2/environment.py",第791行,在get_template中
return self._load_template(name, self.make_globals(globals))
文件&#34; /usr/lib/python3/dist-packages/jinja2/environment.py",第765行,_load_template
template = self.loader.load(self, name, globals)
文件&#34; /usr/lib/python3/dist-packages/jinja2/loaders.py" ;,第113行,载入中 source,filename,uptodate = self.get_source(environment,name)
文件&#34; /usr/lib/python3/dist-packages/flask/templating.py",第64行,在get_source中
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound:index
192.168.1.82 - - [15 / Dec / 2017 23:27:44]&#34; GET / opendoor?
调试器 =是&amp; cmd =资源&amp; f = style.css HTTP / 1.1&#34; 200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]&#34; GET / opendoor?
调试器 =是&amp; cmd =资源&amp; f = jquery.js HTTP / 1.1&#34; 200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]&#34; GET / opendoor?
调试器 =是&amp; cmd =资源&amp; f = debugger.js HTTP / 1.1&#34; 200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]&#34; GET / opendoor?
调试器 =是&amp; cmd =资源&amp; f = console.png HTTP / 1.1&#34; 200 -
192.168.1.82 - - [15 / Dec / 2017 23:27:45]&#34; GET / opendoor?
调试器 =是&amp; cmd =资源&amp; f = source.png HTTP / 1.1&#34; 200 -