我运行这样一个简单的烧瓶应用程序:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def welcome():
return "OK"
app.config.update(
DEBUG = True
)
if __name__ == '__main__':
app.run(use_reloader = False)
当我运行它并访问它时,有时(并非总是)它无法响应请求并抛出一个除外:
Exception happened during processing of request from ('127.0.0.1', 54481)
Traceback (most recent call last):
File "c:\python27\Lib\SocketServer.py", line 295, in _handle_request_noblock
self.process_request(request, client_address)
File "c:\python27\Lib\SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "c:\python27\Lib\SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "c:\python27\Lib\SocketServer.py", line 651, in __init__
self.finish()
File "c:\python27\Lib\SocketServer.py", line 710, in finish
self.wfile.close()
File "c:\python27\Lib\socket.py", line 279, in close
self.flush()
File "c:\python27\Lib\socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 10053]
我无法理解是什么导致了这个错误?我该如何解决呢?
我如何使用try except
来抓住它?
答案 0 :(得分:11)
我最近在尝试使用Flask提供音频文件时遇到了此错误消息。每当客户端在流结束之前关闭流时,我都会收到此错误消息。
此错误消息不是来自Flask应用程序,而是来自用于分派请求数据的基础SocketServer。发生的事情是由于某种原因,与客户端的连接正在结束,但Flask继续尝试将数据写入已关闭的套接字。您无法从Flask应用程序中捕获此异常,因为Flask会为您捕获它。 Flask将其作为一项服务打印出来,通知您该流过早关闭,即在Flask完成向数据流写入数据之前。
总而言之,此错误消息是Flask的内部信息,Flask正在打印它,告诉您在连接关闭之前无法将所有数据传输到客户端。你无法抓住它,你没有任何理由去捕捉它。
答案 1 :(得分:0)
我发现这个解决方案至少可以暂时解决。
if __name__ == '__main__':
while True:
try:
app.run(use_reloader = False)
except:
pass
您可以添加自己的退出逻辑,或者使用CTRL + \保留程序,发送SIGQUIT。 (如果你正在使用带螺纹的烧瓶,这很重要)
但你不能:
except KeyboardInterupt:
因为Flask已经捕获了KeyboardInterupt异常并处理它们。
错误10052表示您正在使用Windows,据我所知,关闭命令窗口以退出程序
答案 2 :(得分:-3)
可能是由于使用的端口号是54481,通过查看您的错误消息。它可能与其他东西发生冲突。我还建议不要使用use_reloader参数,因为你的DEBUG已经设置为False。因此,烧瓶不会重新加载任何代码更改。你可以这样做:
if __name__ == '__main__':
app.run(port=5000)