代码之家  ›  专栏  ›  技术社区  ›  ehsan shirzadi

尝试运行龙卷风main.py时出现语法错误

  •  2
  • ehsan shirzadi  · 技术社区  · 10 年前

    这是我的简单龙卷风项目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 回复  |  直到 10 年前
        1
  •  3
  •   mgilson    10 年前

    我猜你是在玩蟒蛇2.6 似乎 是python2.7的有效语法。在python2.7上,

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

    尝试 构造具有单个成员的集合,该成员是2元组。然而,它将失败 TypeError 如果 Index 不可哈希。不过,在python2.7之前,Set literals并不存在,因此对于早期的python版本,您的代码将抛出 SyntaxError .

    不过,根据我的经验 webapp2 ),处理程序的顺序很重要--所以最好使用有序的可迭代函数,而不是 set 。可能是 tuple list .例如:

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

    显然,如果 tornado.web.Application 需要一个或另一个,使用那个;-)( The docs show a list being used ,所以这可能是安全的…)

        2
  •  3
  •   MattDMo    10 年前

    花括号 { } 你使用的意思是你试图定义字典或集合。我想 url_patterns 与Django中的对应项一样,是一个元组,因此需要使用括号 ( ) 而是:

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