尝试运行tornado main.py时出现语法错误

时间:2014-08-30 05:16:35

标签: python tornado

这是我的简单龙卷风项目main.py文件:

import os
import os.path
import tornado.ioloop
import tornado.web
import tornado.httpserver
import tornado.options
from tornado.options import options


class Index(tornado.web.RequestHandler):

    def get(self, *args, **kwargs):
        self.write('Hello')

url_patterns = {
    (r'/', Index),
}

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app = tornado.web.Application(
        url_patterns,debug=True,
        cookie_secret="*****",
        xsrf_cookies= False,
        template_path=os.path.join(os.path.dirname(__file__), "templates"),
        static_path= os.path.join(os.path.dirname(__file__), "static"),

    )

    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(8080)
    tornado.ioloop.IOLoop.instance().start()

当我想运行此文件时,错误说:

File "main.py", line 16
    (r'/', Index),
                 ^
SyntaxError: invalid syntax

我想在centos 6和python 2.7.8上运行它。这是我的错误图片:

enter image description here

我的项目出了什么问题?

2 个答案:

答案 0 :(得分:3)

您正在使用的大括号{ }意味着您正在尝试定义字典或集合。我认为url_patterns与Django中的对应物一样,是一个元组,因此您需要使用括号( )代替:

url_patterns = (
    (r'/', Index),
)

答案 1 :(得分:3)

我猜你在python2.6上,因为似乎是python2.7的有效语法。在python2.7上,

url_patterns = {
    (r'/', Index),
}

尝试构建一个具有单个成员的集合,该成员是一个2元组。但是,如果TypeError无法播放,则Index会失败。设置文字直到python2.7才存在,所以对于早期的python版本,你的代码将抛出SyntaxError

一般来说,根据我的经验(使用webapp2),处理程序的顺序很重要 - 因此,您最好使用有序迭代而不是set。可能是tuplelist。 e.g:

url_patterns = [
    (r'/', Index),
]

显然如果tornado.web.Application需要其中一个,请使用;-)(The docs show a list being used,这样可能是安全的......)