我有以下类和功能。当我试图通过它时,我得到了:
ImportError: cannot import name Requests
这是我的代码:
from tests.global_functions.util_helper import util_get_random_customer_individual
from tests.global_functions.util_helper import util_get_random_customer_company
from requests import Requests
import random
class Customer():
def __init__(self):
request = Requests()
customer = None
if request.request_type == 'individual':
customer = util_get_random_customer_individual()
elif request.request_type == 'company':
customer = util_get_random_customer_company()
else:
print 'What the hell should I do???? HELP!?!?!?!'
回溯如下:
Traceback (most recent call last):
File "C:/Users/e003048/QA/trunk/automation/selenium/src/webservices/add_customers/webservice_requests.py", line 2, in <module>
import webservices.system_environment.responses
File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\responses.py", line 2, in <module>
import connector
File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\connector.py", line 3, in <module>
import requests
File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\requests.py", line 3, in <module>
from customer import Customer
File "C:\Users\e003048\QA\trunk\automation\selenium\src\webservices\system_environment\customer.py", line 4, in <module>
from requests import Requests
ImportError: cannot import name Requests
不确定我在这里做错了什么或为什么我会收到此错误。我正在使用PyCharm,没有任何迹象表明import语句中有任何错误。
答案 0 :(得分:4)
您有循环导入。 requests
导入customer
,customer
导入requests
。
Python中实际允许循环导入,但如果您尝试执行命名导入(即from foo import Foo
而不是import foo
),则它们无法正常工作。 Python正在尝试导入requests
,但要做到这一点,它需要导入customer
。因此,通过导入requests
的一部分,它开始导入customer
。然后customer
说要查看Request
中名为requests
的内容,但requests
未完成加载,因此该名称尚不存在。
有一些可能的解决方法:
最简单的可能是您只需切换到非命名导入。因此,您必须在requests.Request
模块中说Request
而不是customer
。
更好的选择是尝试消除循环依赖。通常,循环依赖性表明事物过于紧密耦合。将圆形度拉出到第三个模块,或合并两个模块。
第三种选择,但通常认为这种方式很差,就是将customer
requests
导入Request
下面的定义{ {1}}课程。 再次,这是糟糕的风格,我不推荐它。我这里只是为了完整而提到它,但如果你这样做,你几乎肯定会后悔。