Python 3.x 变量未在Flask应用程序中更新
我制作了这个小东西(作为我自己的学习练习),效果很好:Python 3.x 变量未在Flask应用程序中更新,python-3.x,flask,Python 3.x,Flask,我制作了这个小东西(作为我自己的学习练习),效果很好: import urllib.request url = "http://www.google.com" print_result = "" def is_google_down(): try: result = urllib.request.urlopen(url).getcode() if result == 200: print_result = "google.com
import urllib.request
url = "http://www.google.com"
print_result = ""
def is_google_down():
try:
result = urllib.request.urlopen(url).getcode()
if result == 200:
print_result = "google.com is fine"
else:
print_result = "google.com is down"
except urllib.error.HTTPError as e:
print_result = "google.com is down"
print(print_result)
is_google_down()
因此,现在我正在尝试将其转换为flask应用程序,以便围绕结果构建一个网页:
from flask import Flask, render_template
import urllib.request
app = Flask(__name__)
@app.route("/")
def is_it_down():
url = "http://www.google.com"
print_result = "not working"
def is_google_down():
try:
result = urllib.request.urlopen(url).getcode()
if result == 200:
print_result = "google.com is fine"
else:
print_result = "google.com is down"
except urllib.error.HTTPError as e:
print_result = "google.com is down"
print(print_result)
is_google_down()
return render_template("is_it_down.html", result=print_result)
if __name__ == "__main__":
app.run(debug=True)
当我刷新我的网页时,我只得到“不工作”文本,这是
print\u result
最初设置的。为什么不更新?您的内部函数应该返回print\u result
答复:
print_result = is_google_down()
return render_template("base.html", result=print_result)
或答复: 你不需要
is\u google\u down
功能。即使这个函数也几乎不返回任何东西,所以只需删除它
app.py
@app.route("/")
def is_it_down():
url = "http://www.google.com"
print_result = "not working"
try:
result = urllib.request.urlopen(url).getcode()
if result == 200:
print_result = "google.com is fine"
else:
print_result = "google.com is down"
except urllib.error.HTTPError as e:
print_result = "google.com is down"
return render_template("is_it_down.html", result=print_result)
它是吗
{{ result }}
简短回答: 您需要使用
非本地
语句
长答案:
Python认为名为print\u result
的两个变量是不同的,因为它们是在两个不同的范围内声明的(在函数is\u it\u down
和is\u google\u down
中)
这是您的代码的简化版本:
#!/usr/bin/env python3
def is_it_down():
print_result = "not working"
def is_google_down():
print_result = "google.com is fine"
print(print_result)
is_google_down()
print(print_result)
is_it_down()
输出:
google.com is fine
not working
google.com is fine
google.com is fine
虽然这是固定代码,但它将按照您的预期工作:
#!/usr/bin/env python3
def is_it_down():
print_result = "not working"
def is_google_down():
nonlocal print_result
print_result = "google.com is fine"
print(print_result)
is_google_down()
print(print_result)
is_it_down()
输出:
google.com is fine
not working
google.com is fine
google.com is fine
谢谢你的解释。一切都有道理,好像我在做很多不必要的工作。真的很感激