我正在使用Flask和Redis开发一个应用程序。在我的脚本中,我有:

import test

@app.route('/')
def main():
    test.main()
    return 'Hello World!'


在test.py中,我有:

sr = StrictRedis()

def main():
......
......


如果我在main()中单步执行代码,那么在控制台中,我会:

>>> sr
StrictRedis<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> sr.members('myset')


我得到:

AttributeError: 'StrictRedis' object has no attribute 'members'


我还注意到,键入“ sr”时没有自动补全功能。

这与python作用域有关吗?

编辑:

  >>> sr

  StrictRedis<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> sr.StrictRedis.smembers('UNTESTED')
Traceback (most recent call last):
  File "c:\env\flenv\lib\site-packages\IPython\core\interactiveshell.py", line 3035, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-3-aefe6f099eac>", line 1, in <module>
    sr.StrictRedis.smembers('UNTESTED')
AttributeError: 'StrictRedis' object has no attribute 'StrictRedis'


即使我手动输入也没有属性。有趣的是,如果我在pycharm编辑器中键入“ sr。”,则可以得到所有方法,并且可以按预期工作。

最佳答案

这与范围无关。您可以访问sr名称,这是作用域结束和属性查找开始的地方。

您的sr对象(StrictRedis类的实例)只是没有members属性。 StrictRedis documentation似乎并不表明应该有任何东西。

也许您正在寻找StrictRedis.smembers() method代替?注意名称开头的s;您要求集合成员:

sr.smembers('UNTESTED')

关于python - AttributeError:和Python的范围?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31460428/

10-12 22:01
查看更多