我正在使用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)
答案 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 导致循环发生。
这称为圆形循环。
所以,简而言之,更改文件名可以解决问题。