龙卷风“你好,世界”错误

5 投票
2 回答
2844 浏览
提问于 2025-04-16 20:06

我正在命令行中运行以下的HelloWorld脚本

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options

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


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")


def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    main()

但是我遇到了以下错误

File "helloworld.py", line 17, in ?
    import tornado.httpserver
  File "/home/username/public_html/tornado-1.2.1/tornado/httpserver.py", line 28, in ?
    from tornado import ioloop
  File "/home/username/public_html/tornado-1.2.1/tornado/ioloop.py", line 184
    action if action is not None else signal.SIG_DFL)
            ^
SyntaxError: invalid syntax

我刚接触Python,有人能解释一下这个问题是什么吗?顺便说一下,helloworld.py文件在/home/username/public_html/tornado-1.2.1/这个目录下,并且在同一目录下还有一个tornado的子目录。

编辑:(现在可以忽略这个编辑) 我运行的命令是

python helloworld.py

运行python -V的结果是

Python 2.4.3

不幸的是,Tornado不支持2.5之前的版本,所以这可能是问题所在。不过,我已经安装了Python 2.6.6,我该如何确保它使用的是正确的Python版本,而不是旧版本呢?

编辑 II

现在我已经设置为Python 2.6.6

但是运行

python helloworld.py

却没有任何输出。程序在命令行中就卡住了。

有什么想法吗?

2 个回答

1

要把Python 2.6设置为默认版本,确保你在自己的.bash_rc文件中把python指向/usr/bin/python2.6

如果你在尝试修复这个问题,你需要检查并替换条件运算符:

if seconds is not None:
        signal.signal(signal.SIGALRM,
                      action if action is not None else signal.SIG_DFL)

这种写法(action if action is not None else signal.SIG_DFL)只在Python 2.5及以上版本中可用。

另一种写法?虽然不那么优雅,但也能用:

if seconds is not None:
        if action is not None:
            tmpaction = action
        else
            tmpaction = signal.SIG_DFL
        signal.signal(signal.SIGALRM,tmpaction)

我强烈建议你直接升级到最新版本的Python。没有保证你不会遇到其他问题。(当然,除非你想要这个学习的过程)。

2

正如你自己发现的,问题在于 Python 2.4 不支持条件表达式这个功能。

要切换到其他版本的 Python,具体方法取决于你的系统。在 Debian 和 Ubuntu 系统上,你可以编辑 /usr/share/python/debian_defaults 文件。在所有 Linux 系统上,你可以删除 /usr/bin/python,然后链接到你想要的版本:

sudo mv /usr/bin/python /usr/bin/python.dist
sudo ln -s /usr/bin/python2.5 /usr/bin/python

另外,你也可以修改 PATH 环境变量,把包含你想要的 python 程序的目录放在 /usr/bin 之前(这在 Windows 系统上可能是更好的选择)。你可以通过编辑 ~/.profile(每次登录时生效)或 ~/.bashrc(在交互式 bash 终端中生效)来让这个设置永久生效。

撰写回答