python - 如何在 Flask 上捕获这样的异常?

标签 python flask try-catch

我像这样运行一个简单的 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/

相关文章:

python - Python 比较列表中的下一个元素

python - 查找图像中的空白区域

python - Subprocess 语句在 python 控制台中有效,但在 Serverdensity 插件中无效?

python - 为 Python Flask 应用程序创建代理

python - SQLAlchemy 级联删除到多对多表

c++ - 如何从构造函数捕获异常而不处理整个函数?

r - 在 R 中使用 tryCatch 抑制警告

python - Django Admin 批量编辑多对多关系

python - 将 Flask models.py 迁移到 MySQL

.net - 是否有 "Try"约定?