我像这样运行一个简单的 flask 应用程序:
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
来捕获它?
最佳答案
我最近在尝试使用 Flask 提供音频文件时遇到了这个错误消息。每当客户端在流结束之前关闭流时,我都会收到此错误消息。
此错误消息并非来自您的 Flask 应用程序,而是来自用于分派(dispatch)请求数据的底层 SocketServer。发生的情况是与客户端的连接由于某种原因终止,但 Flask 继续尝试将数据写入已关闭的套接字。您无法从 Flask 应用程序中捕获此异常,因为 Flask 会为您捕获它。 Flask 将其作为服务打印出来,通知您流已过早关闭,即在 Flask 完成将数据写入流之前关闭。
总而言之,这个错误消息是 Flask 内部的,Flask 正在打印它来告诉你它无法在连接关闭之前将所有数据发送到客户端。你不能捕获它,你不应该有任何理由去捕获它。
关于python - 如何在 Flask 上捕获这样的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17787023/