4

エラーは次のとおりです。

TypeError: __init__() takes exactly 1 argument (3 given)
ERROR:root:Exception in callback <tornado.stack_context._StackContextWrapper object at 0x1017d4470>
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/tornado-2.4.1-py2.7.egg/tornado/ioloop.py", line  421, in _run_callback
    callback()
  File "/Library/Python/2.7/site-packages/tornado-2.4.1-py2.7.egg/tornado/iostream.py", line 311, in wrapper
    callback(*args)
  File "/Library/Python/2.7/site-packages/tornado-2.4.1-py2.7.egg/tornado/httpserver.py", line 268, in _on_headers
    self.request_callback(self._request)
  File "/Library/Python/2.7/site-packages/tornado-2.4.1-py2.7.egg/tornado/web.py", line 1395, in __call__
    handler = spec.handler_class(self, request, **spec.kwargs)
TypeError: __init__() takes exactly 1 argument (3 given)

コードは次のとおりです。

class IndexHandler(tornado.web.RequestHandler):
    def __init__(self):
        self.title = "Welcome!"

    def get(self):
        self.render("index.html", title=self.title)

上記のようにコードを簡略化しましたが、なぜこれがそのエラーを生成しているのかわかりません。私は何か間違ったことをしているに違いありませんが、何が原因かわかりません (3 つの引数が渡されました???...うーん?)

注:title変数は<title>{{ title }}</title>、私の index.html テンプレートにあるだけです。

Mysqldb-Python を使用するために、32 ビット バージョンの Python 2.7.3 を実行しています。ご覧のとおり、Tornado のバージョンは 2.4.1 です。私はOSX Lionでも実行しています(それが違いを生む場合...)最終的にこのエラーを生成する互換性の問題でしょうか?

これをデバッグする際には、すべてのヘルプを歓迎します。ありがとうございました。

4

2 に答える 2

9

@Princess of the Universeは正しいですが、これには少し詳しく説明する必要があるかもしれません。

Tornadoは、パラメーターを使用__init__してRequestHandlerサブクラスを呼び出すapplication, request, **kwargsため、それを許可する必要があります。

あなたはこれを行うことができます:

def __init__(self, application, request, **kwargs):
    self.title = "Welcome!"
    super(IndexHandler, self).__init__(application, request, **kwargs)

これは、IndexHandlerクラスが親クラスと同じシグネチャで初期化されることを意味します。

ただし、initializeTornadoがこの目的のために提供する方法をお勧めします。

def initialize(self):
    self.title = "Welcome!"
于 2013-02-16T09:48:47.133 に答える
1

オーバーライドしています

__init__()

不適切な方法で。

見る

http://www.tornadoweb.org/documentation/web.html

サインは

class tornado.web.RequestHandler(application, request, **kwargs)[source]

派生クラスのコンストラクターに同じ API を提供する必要があることは明らかです。

于 2013-02-16T06:12:57.460 に答える