Python web.py会话:AttributeError:';螺纹接头';对象没有属性';计数';

Python web.py会话:AttributeError:';螺纹接头';对象没有属性';计数';,python,web.py,Python,Web.py,我只是运行了wiki提供的这个简单代码段,因为我无法让会话正常工作: import web web.config.debug = False urls = ( "/count", "count", "/reset", "reset" ) app = web.application(urls, locals()) session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'c

我只是运行了wiki提供的这个简单代码段,因为我无法让会话正常工作:

import web
web.config.debug = False
urls = (
    "/count", "count",
    "/reset", "reset"
)
app = web.application(urls, locals())
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={'count': 0})

class count:
    def GET(self):
        session.count += 1
        return str(session.count)

class reset:
    def GET(self):
        session.kill()
        return ""

if __name__ == "__main__":
    app.run()
但这会导致以下错误:

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 237, in process
    return self.handle()
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 228, in handle
    return self._delegate(fn, self.fvars, args)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 411, in _delegate
    return handle_class(cls)
  File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 387, in handle_class
    return tocall(*args)
  File "temp.py", line 12, in GET
    session.count += 1
  File "/usr/local/lib/python2.7/dist-packages/web/session.py", line 71, in __getattr__
    return getattr(self._data, name)
AttributeError: 'ThreadedDict' object has no attribute 'count'

webpy是否与2.7.3不兼容?我在webpy的内部Web服务器上运行这个。我使用的是Ubuntu 12.04。

session.count+=1
等于
session.count=session.count+1
,因此
session.count必须存在才能工作

添加以下检查以使其正常工作:

if 'count' not in session:
    session.count = 0
session.count += 1
还有另一种方式,甚至可以在文档的

try:
    s.click += 1
except AttributeError:
    s.click = 1
好吧,试试看……不过我也不认为这是最好的方法(一点也不干净)。 如前所述,会话构造函数提供了初始化会话变量的方法

我真的不确定我们是否可以依赖于“”

首先,我们对各种变量的用途几乎没有任何解释。例如,*db_参数*dict的用途是什么

最后但并非最不重要的一点是,它需要认真更新。提供的代码根本无法与实际框架一起工作。 根本没有web.ctx.session

顺便说一下,我实现了一个简单的计数器,如示例中所示。 显示的错误是由于会话的API发生了剧烈变化。 您不能从会话中直接调用“计数器”。 这可能更像这样:session.store.store\u instance.get('counter')。其中store\u instance是一个shelf或db。 正如我所说,官方文件需要认真更新

尽管如此,我注意到这与docstring不同。为了进步,我从Ipython开始,我看到了我所有的可能性。 我知道这纯粹是猜测,但命名很好,这样我们就可以知道该怎么做


我将向web.py团队提交我的示例,以便他们能够更新官方文档。

在我的拉取请求在GitHub上被接受之前,我将发布一段代码,说明如何使用一个简单的增量器:

import web
import shelve


urls = (
    '/add', 'counter',
    '/reset', 'reset'
)

shelf = shelve.open('session')
shelfStore = web.session.ShelfStore(shelf)
app = web.application(urls, globals())
s = web.session.Session(app, shelfStore)

class counter:        
    def GET(self):
        numberToAdd = web.input().get('number')
        if not numberToAdd:
            numberToAdd = 1
        try:
            print  numberToAdd
            s.store.shelf["count"] += int(numberToAdd)
        except Exception:
            s.store.shelf["count"] = 1
        return s.store.shelf.get("count")


class reset:
    def GET(self): 
        s.store.shelf.clear()

if __name__ == "__main__":
    app.run()

问题在于python版本。我遇到了同样的问题,当我执行python的2.7版本时,我解决了这个问题。只要执行>python2.7code.py,会话就可以完美地工作。
遗憾的是,web.py的文档非常差。

这不是由
session=web.session.session(app,web.session.DiskStore('sessions'),initializer={count':0}行中的初始值设定项完成的吗?
?我想知道同样的问题。如果我们需要启动这个会话参数,初始化器的作用是什么?我在忽略“web.config.debug=False”时遇到了这个错误