【问题标题】:Python 3.6.3: Multiple "Exception ignored in: <generator object..." in flask appPython 3.6.3:烧瓶应用程序中的多个“异常忽略:<生成器对象...”
【发布时间】:2018-03-07 11:17:58
【问题描述】:

我正在运行一个烧瓶应用程序,大约 5 个月前将所有内容从 Python 2.7 升级到 3。

大多数事情都进展得很顺利,除了这个一直在本地困扰我的事情。我在 OSX 10.12.6 上的 MacBook 上,并在 virtualenv 下 brew 安装 Python 3.6.3

当一个请求来自一个看似有多个静态请求(主要是 .css、.js 和图像文件)的页面时,我似乎能够在我的代码中任何使用生成器的任何地方遇到此错误。

一些例子(请求是一个flask.request对象):

一个检查路径是否以“/admin/static”(我的代码)的“/static”开头的地方,

any(request.path.startswith(k) for k in self._static_paths)

.

Exception ignored in: <generator object CustomPrincipal._is_static_route.<locals>.<genexpr> at 0x11450f3b8>
Traceback (most recent call last):
  File "/Developer/repos/git/betapilibs/lbbsports/flask_monkeypatches.py", line 22, in <genexpr>
    any(_checker(request.path, k) for k in self._static_paths)
SystemError: error return without exception set

如果一个url路径被限制,检查登录用户是否有适当的权限/角色,

return role in (role.name for role in self.roles) 

.

Exception ignored in: <generator object UserMixin.has_role.<locals>.<genexpr> at 0x1155a7e08>
Traceback (most recent call last):
  File "/Developer/virtualenvs/lbb3/lib/python3.6/site-packages/flask_security/core.py", line 386, in <genexpr>
SystemError: error return without exception set

一段自定义代码,以确保其“子”帐户 ID 有效,

(not any(ident == account_id for ident in account_ids))

.

Exception ignored in: <generator object CustomSession.get_set_accounts.<locals>.<genexpr> at 0x115ff4fc0>
Traceback (most recent call last):
  File "/Developer/customflask/flasklogin.py", line 168, in <genexpr>
SystemError: error return without exception set

现在,似乎系统没有任何问题,我只是收到这些错误消息,而且并非始终如一,只有有时。如果我在报告这些错误发生的任何地方设置断点,它们就不会再出错了。

如果我在第一个示例中执行类似的操作,将其拆分为 request.path.startswith('/static') or request.path.startswith('/admin/static'),我将不再收到错误消息,而且一般来说,我在应用程序的其余部分中到处使用请求都不会遇到问题.

【问题讨论】:

  • 在某处闻起来像是版本不匹配。我会检查是否有任何 shebang 行引用了较旧的 Python 版本,或者某个文件(某处)是否专门引用了某个过时/修订版本的东西。一个红旗是对.../lbbsports/flask_monkeypatches.py 的引用。猴子补丁可能认为它仍然是 2008 年(或类似的东西)。我遇到了类似的怪事,将一个旧的 Django 网站带入 2010 年代。
  • 我认为这也是一个不匹配的问题,但由于它是一个相当“最近”的向 Python 3 的迁移,我真的没想到会这样。不过,我仍然不知道如何追踪它。在猴子补丁文件上,我实际上只是在今天早些时候才创建的(类似的代码已经在别处,永远存在并且遇到了同样的问题)。
  • @PeterRowell,我刚刚升级到 3.6.4,并创建了一个新的 virtualenv,但问题完全相同。我想它仍然可能(必须?)是在底层 C 层发生的事情,或者类似的事情?
  • @seaders 在这里遇到完全相同的问题并使用 3.6.4 - 非常令人沮丧!
  • 请参阅stackoverflow.com/a/52054289/3427299 以获得解决方案

标签: python flask generator system-error


【解决方案1】:

我的本​​地开发设置中的一个错误是我通过烧瓶应用程序提供所有 /static 和 /admin/static ,而不是通过网络服务器提供它们(在我的情况下,nginx) .所以对于我点击的一些 url,可能有 10 个请求基本上同时进入,Flask 处于调试模式,并且还连接了一个调试器(通过PyCharm)。

当我遇到麻烦以确保所有 '/static' 和 '/admin/static' 从那里而不是通过烧瓶提供服务时,并且烧瓶每个 url 只收到 1 个请求,这个问题就消失了。

我不会将此标记为答案,因为仍然存在潜在问题,但如果其他人遇到与我相同的问题,这是针对我的情况的解决方案。

【讨论】:

  • 感谢您的注意,我在通过 PyCharm 仅在调试模式下使用 Django (2.0) 时遇到了这个问题。
猜你喜欢
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
相关资源
最近更新 更多