Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';模块';对象没有属性_Python_Attributeerror - Fatal编程技术网

Python 属性错误:';模块';对象没有属性

Python 属性错误:';模块';对象没有属性,python,attributeerror,Python,Attributeerror,我有两个python模块: a、 派克 b、 派克 当我运行a.py时,我得到: AttributeError: 'module' object has no attribute 'hi' 这个错误意味着什么?如何修复它?问题在于模块之间的循环依赖关系a导入b和b导入a。但是需要首先加载其中一个模块-在这种情况下,python在b和b之前初始化模块a,而b.hi()还不存在。当您尝试在a中访问它时,您会有相互的顶级导入,这几乎总是一个坏主意 如果您确实必须在Python中进行相互导入,方法是在

我有两个python模块:

a、 派克

b、 派克

当我运行
a.py
时,我得到:

AttributeError: 'module' object has no attribute 'hi'

这个错误意味着什么?如何修复它?

问题在于模块之间的循环依赖关系<代码>a导入
b
b
导入
a
。但是需要首先加载其中一个模块-在这种情况下,python在
b
b之前初始化模块
a
,而
b.hi()
还不存在。当您尝试在
a

中访问它时,您会有相互的顶级导入,这几乎总是一个坏主意

如果您确实必须在Python中进行相互导入,方法是在函数中导入它们:

# In b.py:
def cause_a_to_do_something():
    import a
    a.do_something()
现在a.py可以安全地导入b而不会引起问题


(乍一看,
cause_a_to_do_something()
似乎效率极低,因为它每次调用时都执行
导入
,但实际上导入工作只在第一次完成。第二次及以后导入模块时,这是一个快速操作。)

我在无意中使用与标准Python模块之一相同的名称命名模块时也看到了这个错误。例如,我有一个名为
commands
的模块,它也是一个Python库模块。这被证明是很难跟踪的,因为它在我的本地开发环境中正常工作,但在Google App Engine上运行时出现指定错误而失败。

我是通过引用以错误方式导入的枚举获得此错误的,例如:

from package import MyEnumClass
# ...
# in some method:
return MyEnumClass.Member
正确导入:

from package.MyEnumClass import MyEnumClass

希望这对某人有所帮助

我遇到了这个错误,因为模块没有实际导入。代码如下所示:

import a.b, a.c

# ...

something(a.b)
something(a.c)
something(a.d)  # My addition, which failed.

最后一行产生了一个
属性错误
。原因是我没有注意到
a
a.b
a.c
)的子模块是显式导入的,并且假设
import
语句实际上导入了
a
,以上所有答案都很好,但我想在此插话。如果您没有发现上述任何问题,请尝试清理您的工作环境。它对我很有效。

当我从git签出旧版本的存储库时,遇到了这个问题。Git替换了我的
.py
文件,但保留了未跟踪的
.pyc
文件。由于
.py
文件和
.pyc
文件不同步,因此
.py
文件中的
导入
命令无法在
.pyc
文件中找到相应的模块


解决方案只是删除
.pyc
文件,并让它们自动重新生成。

不确定如何排序,但以下更改对我的问题进行了排序:

我的文件名和导入名相同,例如我的文件名为emoji.py,我正在尝试导入emoji。但更改文件名解决了这个问题


希望它能帮助循环导入造成问题,但是Python有一些内置的方法来缓解它

问题是,当您运行
python a.py
时,它会运行
a.py
,但不会将其标记为导入模块。因此,依次导入模块b->导入模块a->导入模块b。上一次导入没有操作,因为b当前正在导入,Python对此进行了防范。b现在是一个空模块。因此,当它执行
b.hi()
时,它找不到任何东西

请注意,执行的
b.hi()
是在
a.py
->module b->module a期间执行的,而不是直接在
a.py
中执行的

在您的特定示例中,您可以在顶层运行
python-c'import a'
,因此
a.py
的第一次执行被注册为导入模块。

我遇到了同样的问题。 通过使用
重新加载
修复

import the_module_name
from importlib import reload
reload(the_module_name)

在ubuntu 18.04(virtualenv,python.3.6.x)上,以下重新加载片段解决了我的问题:

main.py

其中:

|--main.py    
|--my_module.py

有关更多文档检查:

导入的顺序是我遇到问题的原因:

a.py

############
#这是一个问题
#把这个移到下面
#############
从b进口纽廷
类问题(对象):
通过
A类(对象):
###############
#加在这里
#从b进口纽廷
###############
nt=NewThing()
通过
b.py

来自导入问题的

新课程(问题):
通过

这只是另一个例子,与RichieHindie的答案类似,但与课堂有关。

我已经多次讨论过这个问题,但我没有试图深入研究它。现在我明白了主要问题

这次我的问题是从不同的模块导入序列化程序(django和restframework),例如:

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

# the line below was the problem 'srlzprod'
from products import serializers as srlzprod
class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()

    # the nested relation of the line below
    product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()
    product = serializers.SerializerMethodField()

    class Meta:
        model = mdlpri.CampaignsProducts
        fields = '__all__'

    def get_product(self, obj):
        from products import serializers as srlzprod
        p_fields = ['id', 'name', ]
        return srlzprod.ProductsSerializers(
            obj.product, fields=p_fields, many=False,
        ).data

我遇到了这样的问题:

from product import serializers as srlzprod
ModuleNotFoundError: No module named 'product'

我想要完成的是以下几点:

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

# the line below was the problem 'srlzprod'
from products import serializers as srlzprod
class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()

    # the nested relation of the line below
    product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()
    product = serializers.SerializerMethodField()

    class Meta:
        model = mdlpri.CampaignsProducts
        fields = '__all__'

    def get_product(self, obj):
        from products import serializers as srlzprod
        p_fields = ['id', 'name', ]
        return srlzprod.ProductsSerializers(
            obj.product, fields=p_fields, many=False,
        ).data

因此,正如上面几行提到的如何解决它(顶级导入),我继续进行以下更改:

# change
product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)
# by 
product = serializers.SerializerMethodField()

# and create the following method and call from there the required serializer class
def get_product(self, obj):
        from products import serializers as srlzprod
        p_fields = ['id', 'name', ]
        return srlzprod.ProductsSerializers(
            obj.product, fields=p_fields, many=False,
        ).data

因此,django runserver执行时没有出现问题:

./project/settings/manage.py runserver 0:8002 --settings=settings_development_mlazo
Performing system checks...

System check identified no issues (0 silenced).
April 25, 2020 - 13:31:56
Django version 2.0.7, using settings 'settings_development_mlazo'
Starting development server at http://0:8002/
Quit the server with CONTROL-C.

代码行的最终状态如下:

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

# the line below was the problem 'srlzprod'
from products import serializers as srlzprod
class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()

    # the nested relation of the line below
    product = srlzprod.ProductsSerializers(fields=['id','name',],read_only=True,)

from rest_framework import serializers

from common import serializers as srlz
from prices import models as mdlpri

class CampaignsProductsSerializers(srlz.DynamicFieldsModelSerializer):
    bank_name = serializers.CharField(trim_whitespace=True,)
    coupon_type = serializers.SerializerMethodField()
    promotion_description = serializers.SerializerMethodField()
    product = serializers.SerializerMethodField()

    class Meta:
        model = mdlpri.CampaignsProducts
        fields = '__all__'

    def get_product(self, obj):
        from products import serializers as srlzprod
        p_fields = ['id', 'name', ]
        return srlzprod.ProductsSerializers(
            obj.product, fields=p_fields, many=False,
        ).data

希望这能对其他人有所帮助


您好,

在我使用Python2.7和numpy版本1.15.0的情况下,它与

pip install statsmodels=="0.10.0"

已解决

Python正在您的a.py模块中查找对象

将该文件重命名为其他文件或使用

from __future__ import absolute_import 

a.py模块的顶部。

对于我来说,出现此错误的原因是有一个文件夹与我尝试导入的python模块同名

|-- core  <-- empty directory on the same level as the module that throws the error
|-- core.py

|——请注意,您的问题与此答案非常相似。显然,这个答案中的代码只适用于f