另一个 web.py 名称冲突
Yet another web.py name collision
我正在尝试在 Python 3.7.4 和 web.py 0.40-dev1
(应该是兼容的)中制作一个简单的 Hello World 网页,我 运行变成
AttributeError: module 'web' has no attribute 'applications'
错误。我已经用 google 搜索了足够多的信息,知道这是一个名称冲突,但看在上帝的份上,我无法追踪到它。
完整代码如下:
import web
urls = (
'/', 'index'
)
application = web.applications(urls, globals())
class index:
def GET(self):
greeting = 'Hello world'
return greeting
if __name__ == "__main__":
application.run
下面是完整的 Python 解释器输出:
Traceback (most recent call last):
File "bin\app.py", line 7, in <module>
application = web.applications(urls, globals())
AttributeError: module 'web' has no attribute 'applications'
刚刚快速浏览了文档。看起来您要查找的命令是 web.application
而不是 web.applications
。请注意应用程序上没有 s。
因为你,我才安装 web.py
来测试你的代码。 web.py
里好像没有applications
。如果您想检查它,请尝试以下示例。
>>> import web
>>>
>>> `applications` in dir(web)
False
>>> `application` in dir(web)
True
所以应该是 web.application
。你的第一个问题解决了,当你 运行 它时你会得到另一个错误 RuntimeError: generator raised StopIteration
。该问题已在 问题中解决。它的发生是因为 python 3.7.*
版本。 0.40-dev1
版本有问题。你有两个选择。
- 删除
0.40-dev1
版本并从那里的 master 分支安装稳定版本。只需使用此命令 pip uninstall web.py==0.40-dev1
和 运行 此命令 pip install -e git+https://github.com/webpy/webpy.git#egg=webpy
即可卸载。这将从 master 分支安装最新版本。 (这对我有用)
- 下一个是以这种方式更新
utils.py
。从 Python\Python37\Lib\site-packages\web\utils.py
中找到它(我从 windows 中尝试)并找到 line 526
。然后你会看到类似这样的东西yield next(seq)
并以这种方式用 try-catch
语句包围它。 (不推荐,而不是通过相关分支创建自己的版本)
def take(seq, n):
for i in range(n):
# yield next(seq)
try:
yield next(seq)
except StopIteration:
return
这将解决您的问题。我在这里添加了一些额外的上下文,因为我想查看输出。我对这个变化了解不多,只是从 问题中得到的。
我正在尝试在 Python 3.7.4 和 web.py 0.40-dev1
(应该是兼容的)中制作一个简单的 Hello World 网页,我 运行变成
AttributeError: module 'web' has no attribute 'applications'
错误。我已经用 google 搜索了足够多的信息,知道这是一个名称冲突,但看在上帝的份上,我无法追踪到它。
完整代码如下:
import web
urls = (
'/', 'index'
)
application = web.applications(urls, globals())
class index:
def GET(self):
greeting = 'Hello world'
return greeting
if __name__ == "__main__":
application.run
下面是完整的 Python 解释器输出:
Traceback (most recent call last):
File "bin\app.py", line 7, in <module>
application = web.applications(urls, globals())
AttributeError: module 'web' has no attribute 'applications'
刚刚快速浏览了文档。看起来您要查找的命令是 web.application
而不是 web.applications
。请注意应用程序上没有 s。
因为你,我才安装 web.py
来测试你的代码。 web.py
里好像没有applications
。如果您想检查它,请尝试以下示例。
>>> import web
>>>
>>> `applications` in dir(web)
False
>>> `application` in dir(web)
True
所以应该是 web.application
。你的第一个问题解决了,当你 运行 它时你会得到另一个错误 RuntimeError: generator raised StopIteration
。该问题已在 python 3.7.*
版本。 0.40-dev1
版本有问题。你有两个选择。
- 删除
0.40-dev1
版本并从那里的 master 分支安装稳定版本。只需使用此命令pip uninstall web.py==0.40-dev1
和 运行 此命令pip install -e git+https://github.com/webpy/webpy.git#egg=webpy
即可卸载。这将从 master 分支安装最新版本。 (这对我有用) - 下一个是以这种方式更新
utils.py
。从Python\Python37\Lib\site-packages\web\utils.py
中找到它(我从 windows 中尝试)并找到line 526
。然后你会看到类似这样的东西yield next(seq)
并以这种方式用try-catch
语句包围它。 (不推荐,而不是通过相关分支创建自己的版本)
def take(seq, n):
for i in range(n):
# yield next(seq)
try:
yield next(seq)
except StopIteration:
return
这将解决您的问题。我在这里添加了一些额外的上下文,因为我想查看输出。我对这个变化了解不多,只是从