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 で失敗するのはなぜですか? そして、なぜ途中で「役に立たない」表現を追加すると問題が解決するのですか?