在 appengine 应用程序中,我想为对象列表构建一组所有属性名称。这应该相当简单:
users = security.User.all().fetch(1000)
props = set([k for k in u.properties().keys() for u in users])
但是,上面的代码会导致错误:
File "/Users/paulkorzhyk/Projects/appengine-flask-template/app/app.py", line 70, in allusers
props = set([k for k in u.properties().keys() for u in users])
UnboundLocalError: local variable 'u' referenced before assignment
在调试器中进行了一些实验后,我注意到添加一个虚拟表达式可以修复代码:
users = security.User.all().fetch(1000)
[u.properties().keys() for u in users]
props = set([k for k in u.properties().keys() for u in users])
这对我来说非常违反直觉,为什么原始版本在 Python 2.7 中失败了?为什么在中间添加“无用”表达式可以解决问题?