簡體   English   中英

龍卷風'Hello World'錯誤

[英]Tornado 'Hello World' Error

我試圖在命令行運行以下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 ,有人可以解釋所指出的問題是什么嗎? PS 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而不是舊版本運行?

編輯二

現在我將Python設置為2.6.6

並運行

python helloworld.py

不產生任何輸出。 該程序只是在命令行凍結。

這有什么想法?

正如您自己發現的那樣,問題是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

或者,您可以在/usr/bin之前修改PATH環境變量以包含具有所需python二進制文件的目錄(這可能是Windows上的方法)。 您可以通過編輯~/.profile (在每次登錄時)或~/.bashrc (在交互式,bash shell中)來使其永久化。

要將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則為action if action is not None else signal.SIG_DFL )僅在Python 2中可用。> = 5

alt? 不太好但可行:

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

我強烈建議你簡單地升級到最新版本的PYTHON。 沒有保證您不會發現其他問題。 (當然,除非你想要學習經驗)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM