while循环不循环或执行

时间:2017-12-15 23:20:47

标签: python python-3.x while-loop

我正在使用一个系统,它应该使我的一个覆盆子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循环不会执行。 有谁知道为什么它不起作用?

3 个答案:

答案 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 -