运行时每次加载网页时出错



今天,当我开始编写网页时,它工作正常,但突然我的css文件不起作用。我的更改未更新。读了一会儿后,我读到我应该清理我的缓存。我这样做了,之后当我运行我的网页并单击任何按钮时,我在控制台中看到下一个输出:

127.0.0.1:50860 - - [22/Dec/2019 13:22:20] "HTTP/1.1 POST /check-login" - 200 OK
127.0.0.1:50861 - - [22/Dec/2019 13:22:20] "HTTP/1.1 GET /static/css/swap.css" - 304 Not Modified
RuntimeError('generator raised StopIteration')
127.0.0.1:50860 - - [22/Dec/2019 13:22:20] "HTTP/1.1 GET /" - 200 OK
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/web/httpserver.py", line 239, in __iter__
raise StopIteration()
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/cheroot/server.py", line 1280, in communicate
req.respond()
File "/usr/local/lib/python3.7/site-packages/cheroot/server.py", line 1083, in respond
self.server.gateway(self).respond()
File "/usr/local/lib/python3.7/site-packages/cheroot/wsgi.py", line 145, in respond
for chunk in filter(None, response):
RuntimeError: generator raised StopIteration
127.0.0.1:50860 - - [22/Dec/2019 13:22:20] "HTTP/1.1 GET /static/css/swap.css" - 304 Not Modified
RuntimeError('generator raised StopIteration')
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/web/httpserver.py", line 239, in __iter__
raise StopIteration()
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/cheroot/server.py", line 1280, in communicate
req.respond()
File "/usr/local/lib/python3.7/site-packages/cheroot/server.py", line 1083, in respond
self.server.gateway(self).respond()
File "/usr/local/lib/python3.7/site-packages/cheroot/wsgi.py", line 145, in respond
for chunk in filter(None, response):
RuntimeError: generator raised StopIteration

我的主文件如下所示:

import web   
from Models import RegisterModel, LoginModel
web.config.debug = False
urls = (
'/', 'home',
'/login', 'login',
'/register', 'register',
'/postregistration', 'postRegistration',
'/check-login', 'checkLogin',
'/logout', 'logout'
)
TEMPLATE_PATH = './Views/Templates'
BASE_FILE = 'MainLayout'

app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore("sessions"), initializer={'user': None})
session_data = session._initializer
render = web.template.render(TEMPLATE_PATH, base=BASE_FILE, globals={'session': session_data, 'current_user': session_data["user"]})
# Classes/Routes
class home:
def GET(self):
return render.home()
class login:
def GET(self):
return render.login()
class checkLogin:
def POST(self):
data = web.input()
login_model = LoginModel.LoginModel()
isCorrect = login_model.check_user(data)
if isCorrect:
session_data["user"]=isCorrect
return isCorrect
return "error"
class logout:
def GET(self):
session['user'] = None
session_data['user'] = None
session.kill()
return "success"
class register:
def GET(self):
return render.register()
class postRegistration:
def POST(self):
data = web.input()
reg_model = RegisterModel.RegisterModel()
reg_model.insert_user(data)
return data.username
if __name__ == "__main__":
app.run()

如果您需要有关任何文件的更多信息,请告诉我。

提前谢谢。

类似的问题在这里。在python 3.7中,StopIteration的规则发生了变化。

PEP 479 为 Python 3.7 中的所有代码启用,这意味着 在协程中直接或间接引发的停止迭代异常 生成器将转换为运行时错误异常。

您需要在错误位置使用 try-except 如上面的链接。

编辑

在您的代码中,似乎 css 没有更改,因此 304 未修改会引发 StopIteration。

__iter__函数 在 ../site-packages/web/httpserver.py,你会发现这部分。

def __iter__(self):
# ...
try:
path = self.translate_path(self.path)
etag = '"%s"' % os.path.getmtime(path)
client_etag = environ.get("HTTP_IF_NONE_MATCH")
self.send_header("ETag", etag)
if etag == client_etag:
self.send_response(304, "Not Modified")
self.start_response(self.status, self.headers)
return
except OSError:
pass  # Probably a 404

在底部添加此内容。

except StopIteration:
return

或使用pass而不是return。这将冗长地重写同样的事情。

最新更新