如何解决循环导入错误?

时间:2020-07-11 19:14:23

标签: python python-3.x import python-import importerror

我正在使用Python中的电话号码模块。我遇到了循环导入的问题。每当我从桌面位置( C:\ Users \ AsadA \ Desktop )运行文件时,都会忽略此错误。但是,每当我尝试在特定文件夹( C:\ Users \ AsadA \ Desktop \ Python_projects \ 28-FindingTheNUMBER )中运行此命令时,都会引发错误。请帮帮我!

示例代码:

import phonenumbers

from phonenumbers import geocoder

from phonenumbers import carrier

from phonenumbers import timezone

my_Num=phonenumbers.parse("SAMPLE_NUM")

print(geocoder.description_for_number(my_Num,'en'))

print(carrier.name_for_number(my_Num,'en'))

print(timezone.time_zones_for_number(my_Num))

错误:

Traceback (most recent call last):
  File "c:/Users/AsadA/Desktop/Python_projects/28-FindingTheNUMBER/phonenumbers.py", line 1, in <module>
    import phonenumbers
  File "c:\Users\AsadA\Desktop\Python_projects\28-FindingTheNUMBER\phonenumbers.py", line 2, in <module>
    from phonenumbers import geocoder
ImportError: cannot import name 'geocoder' from partially initialized module 'phonenumbers' (most likely due to a circular import) (c:\Users\AsadA\Desktop\Python_projects\28-FindingTheNUMBER\phonenumbers.py)

2 个答案:

答案 0 :(得分:1)

您要使用“导入电话号码”导入模块电话号码,然后在接下来的几行中导入该模块内的相关定义。它们是多余的。

固定代码:

import phonenumbers

my_Num=phonenumbers.parse("SAMPLE_NUM")

print(phonenumbers.geocoder.description_for_number(my_Num,'en'))

print(phonenumbers.carrier.name_for_number(my_Num,'en'))

print(phonenumbers.timezone.time_zones_for_number(my_Num))

或者类似这样的东西:

from phonenumbers import (
    parse,
    geocoder,
    carrier,
    timezone,
)

my_Num=parse("SAMPLE_NUM")

print(geocoder.description_for_number(my_Num,'en'))

print(carrier.name_for_number(my_Num,'en'))

print(timezone.time_zones_for_number(my_Num))

答案 1 :(得分:1)

您可能将文件命名为 “phonenumber.py”。如果您在 python 中导入某些内容,请确保文件名与导入的文件名不同。如果相同,则会产生错误。
发生这种情况是由于与导入文件的同名冲突,因为导入的文件名也相同。如果发生这种情况,那么 python 总是优先考虑您正在工作的当前目录的文件。
因此,假设您的代码如下所示。

import xyz
print(xyz.version)

你的文件名为“xyz.py”。 Python编译器现在看到有两个同名的文件“xyz.py”,一个在安装python的脚本文件夹中,另一个在我们正在工作的当前目录中。因此,python 编译器编译器选择要从您正在处理的当前目录导入的文件。
所以,python read first line import xyz,它从当前目录导入文件,这意味着它再次导入这个文件并开始读取它。在那,第一行是 import xyz,然后它再次在当前文件夹中导入 xyz 导致循环发生。
这称为圆形循环

所以,简而言之,更改文件名可以解决问题。