Python Tornado AttributeError:模块“ test”没有属性“ __path__”

时间:2019-01-03 22:13:54

标签: python path tornado

我正在尝试仅运行Tornado docs中的Hello World代码

import tornado.ioloop
import tornado.web

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

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

除了我遇到错误:AttributeError: module 'test' has no attribute '__path__'

我只是使用IDLE运行test.py

我认为这是由于Windows 10计算机没有PATH可以访问Python,但是即使在PATH中添加了python 3.6,我仍然遇到相同的错误。有什么想法吗?

该屏幕截图是我将python添加到PATH的方式,我认为我没错。

enter image description here

------ EDIT ------

我将添加一些我遇到的错误/回溯的屏幕截图。第一个是在Windows 10的IDLE 3.6中运行test.py时的命令提示符。

enter image description here

如果出现导入​​错误,我可以通过IDLE解释器很好地导入Tornado。 enter image description here

我还尝试在IPython 3.7中运行此hello World代码,但出现此错误: enter image description here

1 个答案:

答案 0 :(得分:0)

解决方案::在不使用-m参数的情况下运行文件。

另一种解决方案是提供不带.py扩展名的文件名:

python -m test

这也将起作用。


说明:

-m参数告诉Python运行Python路径中存在的模块(文件)。它不使用文件名,而是使用模块名。区别在于文件名包含后缀.py,而模块名不包含后缀。

因此,您也可以像这样运行test.py文件:python -m test


何时使用-m参数:

这里的-m参数是为了方便起见。例如,如果要运行python的默认http服务器(python随附),则可以编写以下命令:

python -m http.server

这将为您启动http服务器。 -m参数给您带来的便利是,您可以从系统中的任何位置编写此命令,而python会自动在系统的http中查找名为Path的软件包。

没有-m参数,如果要运行http服务器,则必须提供完整的路径,例如:

python C:\path\to\python\installation\http\server.py

因此,-m参数使运行Path中存在的模块(文件)变得容易。


  

借助Tornado,您是否会知道如何杀死Python解释器? CNTRL-C不执行任何操作。

我使用Linux,Ctrl-C对我来说很好用。在Windows上,您可以尝试Ctrl-DCtrl-Z。或以下是一些答案:Stopping python using ctrl+c