【发布时间】: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