2017-01-23 6 views
2

Ich versuche zu lernen, wie Sie das Python-Web-Framework Tornado verwenden. Ich kenne Flask bereits, aber bisher habe ich Schwierigkeiten, eine einfache App zu starten. Meine Verzeichnisstruktur ist wie folgt:Initialize Fehler beim Ausführen einer einfachen Python Tornado App

  • App
    • statische
    • Vorlagen
      • testing.html -app.py
einfach

in app.py Mein Code ist:

define("port", default=5000, help="run on the given port", type=int) 

class Application(tornado.web.Application): 
    def __init__(self): 
     handlers = [ 
      (r"/", MainHandler), 
     ] 
     settings = dict(
      template_path=os.path.join(os.path.dirname(__file__), "templates"), 
      static_path=os.path.join(os.path.dirname(__file__), "static"), 
      debug=True, 
     ) 
     super(Application, self).__init__(handlers, **settings) 

class MainHandler(tornado.web.RedirectHandler): 
    def get(self): 
     self.render("Testing.html") 

if __name__ == "__main__": 
    http_server = tornado.httpserver.HTTPServer(Application()) 
    http_server.listen(options.port) 
    tornado.ioloop.IOLoop.current().start() 

Allerdings, wenn ich laufen app.py ich den Fehler:

ERROR:tornado.application:Uncaught exception 
Traceback (most recent call last): 
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/http1connection.py", line 238, in _read_message 
delegate.finish() 
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/httpserver.py", line 289, in finish 
self.delegate.finish() 
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2047, in finish 
self.execute() 
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 2067, in execute 
**self.handler_kwargs) 
File "/vt/release/dist/3p/anaconda/lib/python2.7/site-packages/tornado/web.py", line 187, in __init__ 
self.initialize(**kwargs) 

TypeError: initialize() takes at least 2 arguments (1 given) 

Warum ist das? Ich sollte erwähnen, dass es mir den Fehler nicht gibt, bis ich versuche, eine Verbindung herzustellen.

+2

Bitte geben Sie die * gesamte * Fehlermeldung. Es sollte einen Stack-Trace geben, der die gesamte Folge von Anrufen zeigt. Das andere Ende zeigt eine Zeile in Ihrem eigenen Code an. – Prune

+0

@Prune Ich fügte die volle Nachricht hinzu, es enthält nicht wirklich eine Zeile in meinem eigenen Code obwohl – klib

Antwort

3

Ihr MainHandler sollte von RequestHandler, nicht von RedirectHandler erben.

(Details: Der RedirectHandler benötigt zwei Argumente, "self" und "target_path". Sie würden den Zielpfad in Ihrer Handler-Liste in Application .__ init__ angeben. Da Sie dieses zweite Argument nicht in der Handler-Liste haben und Sie vererben falsch von RedirectHandler, Tornado erhält eine Ausnahme.)

+0

Das ist peinlich, ich weiß nicht, ob ich aggressiv tab completing war oder ein Beispiel sah, wo das verwendet wurde – klib

+0

@klib: Jemand werde genau denselben dummen Fehler machen und jetzt werden sie das finden und in der Lage sein, es schnell zu beheben. –

Verwandte Themen