在一个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中失败?为什么在中间添加一个“无用”的表达式可以解决问题?