【问题标题】:AttributeError: 'function' object has no attribute 'HOST'AttributeError:'function'对象没有属性'HOST'
【发布时间】:2013-11-11 12:46:00
【问题描述】:

我的设置文件定义如下(config/settings.py):

HOST='localhost'
PORT='9001'

当我在视图中导入设置并按如下方式打印每个设置的值时,它会正确打印(views/user.py):

from ..config import settings

print settings.HOST
print settings.PORT

但是当我从 def 内部使用或打印相同的值时,它会给出错误(views/user.py):

from ..config import settings

print settings.HOST
print settings.PORT

@handle_error
def usersettings():
   print settings.HOST
   print settings.PORT

上述文件中调用def函数报错如下:

ERROR:root:'function' object has no attribute 'HOST'
Traceback (most recent call last):
  File "/home/rahul/mywebapp/webapp/views/utils.py", line 36, in decorated_view
    return_value = func(*args, **kwargs)
  File "/home/rahul/mywebapp/webapp/views/utils.py", line 27, in decorated_view
    return func(*args, **kwargs)
  File "/home/rahul/mywebapp/webapp/views/user.py", line 344, in usersettings
    print settings.HOST
AttributeError: 'function' object has no attribute 'HOST'

utils.py 装饰了名为 handle_error 的视图

我的包结构如下:

mywebapp/
   run.py
   webapp/
      __init__.py
      views/
         __init__.py
         utils.py
         user.py
      config/
         __init__.py
         settings.py

仅供参考:这个用法一直工作到昨晚,突然出现上述错误时,它的行为变得很奇怪。我在这里做错了什么?

编辑:

我的init.py如下:

from .utils import *
from .user import *

【问题讨论】:

  • 您需要向我们展示更多代码。一些other 代码将settings function 添加到该模块。导入模块时该函数还不存在(至少不在您打印settings.HOST 的位置),但是当usersettings()调用 时,settings 已被重新绑定到函数对象.
  • 您的代码中可能还有另一个 settings 函数,它解释了这种行为。
  • 你能显示user.py吗?
  • 请检查整个代码库是否使用字符串settings,并检查是否没有def settings(...) 行或settings = something else
  • 谢谢大家......你们都是正确的......通过一些我的user_settings函数的初始名称'user_'被删除导致这个问题......我应该先查看我的user.py发布查询...

标签: python flask runtime-error


【解决方案1】:

在您的import 语句之后,可能声明了一个名为settings 的函数,或者在usersettings 之前导入了一个函数。 Python 现在将名称 settings 识别为该函数,而不是您导入的模块。

为确保不会发生这种情况,您可以在导入后直接放置所需的部分:

from ..config import settings

HOST = settings.HOST
PORT = settings.PORT

...

你可以在以后喜欢的时候访问它:

def usersettings():
    print HOST, PORT

希望这会有所帮助!

【讨论】:

  • 谢谢......你们都是正确的......通过一些我的user_settings函数的初始名称'user_'被删除导致这个问题......我应该在发布之前查看我的user.py查询...
  • 没问题!如果这回答了您的问题,请接受它!
猜你喜欢
  • 2016-03-10
  • 2022-01-26
  • 2019-05-17
  • 2017-07-04
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多