无法从类导入

时间:2014-02-27 22:18:08

标签: python python-2.7

我有以下类和功能。当我试图通过它时,我得到了:

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语句中有任何错误。

1 个答案:

答案 0 :(得分:4)

您有循环导入。 requests导入customercustomer导入requests

Python中实际允许循环导入,但如果您尝试执行命名导入(即from foo import Foo而不是import foo),则它们无法正常工作。 Python正在尝试导入requests,但要做到这一点,它需要导入customer。因此,通过导入requests的一部分,它开始导入customer。然后customer说要查看Request中名为requests的内容,但requests未完成加载,因此该名称尚不存在。

有一些可能的解决方法:

  1. 最简单的可能是您只需切换到非命名导入。因此,您必须在requests.Request模块中说Request而不是customer

  2. 更好的选择是尝试消除循环依赖。通常,循环依赖性表明事物过于紧密耦合。将圆形度拉出到第三个模块,或合并两个模块。

  3. 第三种选择,但通常认为这种方式很差,就是将customer requests导入Request 下面的定义{ {1}}课程。 再次,这是糟糕的风格,我不推荐它。我这里只是为了完整而提到它,但如果你这样做,你几乎肯定会后悔。