【问题标题】:Yet another web.py name collision [closed]又一次 web.py 名称冲突[关闭]
【发布时间】:2019-12-12 02:30:59
【问题描述】:

我正在尝试用 Python 3.7.4 和 web.py 0.40-dev1(应该是兼容的)制作一个简单的 Hello World 网页,但我遇到了

AttributeError: 模块 'web' 没有属性 'applications'

错误。我已经用谷歌搜索了足够多的信息,知道这是一个名字冲突,但看在上帝的份上,我无法追踪它。

这是完整的代码:

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'

【问题讨论】:

  • applications()web 模块中应该做什么?
  • 这就是问题所在。

标签: python python-3.x web.py


【解决方案1】:

只是快速浏览了一下文档。看起来您要查找的命令是 web.application 而不是 web.applications。请注意应用程序中没有 s。

【讨论】:

  • OP 有一个同名的变量。虽然在这种情况下不会发生碰撞,但可能会导致混乱。
  • 这可能会导致一些混乱。但是他没有做通配符导入from web import *,所以总是需要web前缀。就我个人而言,这可以避免对我造成任何混淆。
  • 是的,解决了这个问题。现在我从\web\utils.py 得到“RuntimeError: generator raise StopIteration”。我想我应该问那个问题。
  • 在你用谷歌搜索新问题后发布一个新问题。
【解决方案2】:

因为你,我只是安装web.py 来测试你的代码。 web.py 中似乎没有 applications。如果您想检查它,请尝试以下示例。

>>> import web
>>> 
>>> `applications` in dir(web)
False
>>> `application` in dir(web)
True

所以应该是web.application。你的第一个问题得到解决,当你运行它时,你会得到另一个错误RuntimeError: generator raised StopIteration。该问题在“RuntimeError: generator raised StopIteration” every time I try to run app 问题中得到解决。这是因为python 3.7.* 版本而发生的。 0.40-dev1 版本有问题。您有两种选择。

  1. 删除0.40-dev1 版本并从那里的主分支安装稳定版本。只需使用此命令pip uninstall web.py==0.40-dev1 卸载并运行此命令pip install -e git+https://github.com/webpy/webpy.git#egg=webpy。这将从 master 分支安装最新版本。 (这对我有用)
  2. 下一个是以这种方式更新utils.py。从Python\Python37\Lib\site-packages\web\utils.py 找到它(我从Windows 尝试)并找到line 526。然后你会看到类似 thisyield next(seq) 的内容,并以这种方式用try-catch 语句包围它。 (不推荐,而不是通过 fork 相关分支制作自己的版本)
def take(seq, n):
    for i in range(n):
        # yield next(seq)
        try:
            yield next(seq)
        except StopIteration:
            return

这将解决您的问题。我在这里添加了一些额外的上下文,因为我想查看输出。我不太了解这个变化,只是从“RuntimeError: generator raised StopIteration” every time I try to run app问题中得到的。

【讨论】:

  • 如果您需要,我可以向他们提出拉取请求(或者您也可以这样做,如果您知道的话)。然后你可以安装你自己版本的web.py,而不需要从site-package更改文件。
  • 您的意思是在第一个示例中使用反引号吗?
  • 抱歉,我没听懂你提到的关于back-ticksfirst example 的内容?您是否根据我的建议编辑了utils.py
  • @Kushan Gunasekera,我得到了同样的结果。 0.40-dev10.40-dev0 在同一个地方引发相同的 RuntimeError: generator raised StopIteration 错误,0.39 与 Python 3.7 不兼容。诚然,考虑到我前几天刚开始学习 Python,我不太愿意参与 github 上的第三方项目。
  • 不等@ADSMarko,我会给你一个解决方案,别担心。给我几分钟。你是windows 还是linux 用户?
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2016-02-22
  • 1970-01-01
  • 2017-10-31
  • 2023-02-10
  • 2013-04-27
  • 2012-07-08
  • 1970-01-01
相关资源
最近更新 更多