2011-07-15 9 views
2

私のコードがどこを呼び出すのかわからないので、私は理解できませんエラーメッセージがあります。 dev_appserverのGoogleアプリエンジンでUserオブジェクトを使用すると表示されます。それが何を意味するのか教えていただけますか?エラーメッセージのヘルプ

ERROR 2011-07-15 15:01:07,664 __init__.py:463] 'User' object has no attribute '_User__email' 
Traceback (most recent call last): 
    File "/media/Lexar/projects/google/appengine/ext/webapp/__init__.py", line 700, in __call__ 
    handler.get(*groups) 
    File "/media/Lexar/projects/myproject/i18n.py", line 313, in get 
    self.response.out.write(template.render(path, template_values)) 
    File "/media/Lexar/projects/google/appengine/ext/webapp/template.py", line 73, in render 
    return t.render(Context(template_dict)) 
    File "/media/Lexar/projects/google/appengine/ext/webapp/template.py", line 115, in wrap_render 
    return orig_render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 173, in render 
    return self._render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 167, in _render 
    return self.nodelist.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render 
    bits.append(self.render_node(node, context)) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node 
    return node.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/loader_tags.py", line 139, in render 
    return self.template.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 173, in render 
    return self._render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 167, in _render 
    return self.nodelist.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render 
    bits.append(self.render_node(node, context)) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node 
    return node.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/defaulttags.py", line 258, in render 
    return self.nodelist_true.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 796, in render 
    bits.append(self.render_node(node, context)) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 809, in render_node 
    return node.render(context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 849, in render 
    return _render_value_in_context(output, context) 
    File "/media/Lexar/projects/lib/django_1_2/django/template/__init__.py", line 829, in _render_value_in_context 
    value = force_unicode(value) 
    File "/media/Lexar/projects/lib/django_1_2/django/utils/encoding.py", line 66, in force_unicode 
    s = unicode(s) 
    File "/media/Lexar/projects/google/appengine/api/users.py", line 188, in __unicode__ 
    return unicode(self.nickname()) 
    File "/media/Lexar/projects/google/appengine/api/users.py", line 152, in nickname 
    if (self.__email and self.__auth_domain and 
AttributeError: 'User' object has no attribute '_User__email' 

編集:私は

UPDATE Userオブジェクトを使用して、いくつかのミスを作ってるんだだから、たぶん

'user_url': users.create_logout_url(self.request.uri) if users.get_current_user() else 'login','user' : users.get_current_user(),

:私はこのコードを削除するときにエラーが消えることがありますが持っているようです私が適用したモンキータイプとは何か。この部分を削除するとエラーがなくなり、このパッチがまだ必要かどうかわかりません。私はあなたのエラーは、いくつかのモジュールのインポート時にですよねモンキーパッチが How do I apply a monkeypatch to GAE?

+1

私はあなたのUPDATEの情報に困惑しています。このパッチは 'User .__ email'(= 'User._User__email')に値を割り当てるように見えるので、' User'オブジェクトがなければ驚いています。私はあなたがパッチを間違った方法で適用できるかどうか分かったが、*削除すると問題は解決してはならないだろう...確かに困惑する...: -/ – mac

+0

コードが何をするのか困惑する私はそれを保つべきかどうか。私はコードを理解できませんでした。貼り付けるだけで済むようになりました。今では、その問題がSDKによって解決されている可能性があるので、今はもうそれを宣言する必要はありません。 –

+1

私の哲学は、コードがそのために設計されたテストに合格し、パッチがセキュリティ上の問題に対処しないと、決してパッチを当てないということです。その理由は、(パッチのように)コードの他の部分の作業に微妙なパッチが影響を与えることがあり、パッチのあるバージョンのメインソフトウェアにアップグレードする際に壊れるコードを簡単に作成することができるからですもう必要ないでしょう。これは、私がテスト駆動開発、btwと恋している多くの理由の一つです! :) – mac

答えて

1

から来

def _user_init(self, email=None, _auth_domain=None, 
      _user_id=None, federated_identity=None, federated_provider=None, 
      _strict_mode=True): 

    if not _auth_domain: 
    _auth_domain = os.environ.get('AUTH_DOMAIN') 
    assert _auth_domain 

    if email is None and federated_identity is None: 
    email = os.environ.get('USER_EMAIL', email) 
    _user_id = os.environ.get('USER_ID', _user_id) 
    federated_identity = os.environ.get('FEDERATED_IDENTITY', 
             federated_identity) 
    federated_provider = os.environ.get('FEDERATED_PROVIDER', 
             federated_provider) 

    if not email and not federated_identity and _strict_mode: 
    raise UserNotFoundError 

    self.__email = email 
    self.__federated_identity = federated_identity 
    self.__federated_provider = federated_provider 
    self.__auth_domain = _auth_domain 
    self.__user_id = _user_id or None 

users.User.__init__ = _user_init 

関連スレッドに報告されます:

ERROR 2011-07-15 15:01:07,664 __init__.py:463] 'User' object has no attribute '_User__email' 

__init__.pyは、定義ファイルでありますモジュールのパッケージであるディレクトリ。

Userオブジェクトを含む#463行を検索するか、インポートに失敗したパッケージを選択して削除することができます。

私はそれを固定するため、あなたはUserオブジェクトが属性(__emailmangled nameである)_User__emailを持っていないときに確認する必要がありますが、あなたはそれが難しいのミスを発生させる呼び出しを行う方法を知らないことを推測します言う...

+1

ちょうどfyi、 '_User__email'属性はpythonの[二重アンダースコア名'User .__ email'の定義から「mangling」(http://docs.python.org/tutorial/classes.html#private-variables)を参照してください。 – senderle

+0

私はユーザオブジェクトを使用しないとエラーになります。つまり、Userオブジェクトを使ってコメントアウトした場合、エラーはなくなります: '... 'user_url':users.create_logout_url(self.request.uri)users.get_current_user ()else 'login'、 'user':users.get_current_user()、...' –

+1

@sendle - 良い点、私はそれを直接答えに含めました。 – mac