2014-02-27 38 views
1

我有以下類和函數。當我試圖通過它來運行我得到:不能從一個類導入

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,並且沒有任何內容表明導入語句中有任何錯誤。

+0

假設你沒有不同的PYTHONPATH干擾,這可能是一個名稱衝突,儘管可能也是一個循環導入問題。調用堆棧似乎支持這一點。你有自己的包或命名爲「請求」的模塊嗎? –

+0

@SilasRay是的,我有一個'request'模塊,帶有'Requests'類,這是我正在嘗試導入 – DarthOpto

+0

我建議嘗試從請求導入*'雖然我不確定這是否建議 – 2014-02-27 22:25:14

回答

4

您有循環進口。 requests進口customercustomer進口requests

圓形進口實際上是允許Python,但他們沒有很好地工作,如果你試圖做一個名爲進口(即from foo import Foo而非import foo)。 Python正在嘗試導入requests,但要做到這一點,它需要導入customer。所以部分通過導入requests它開始導入customer。然後customer表示它想要查看requests中名爲Request的東西,但requests尚未完成加載,因此該名稱尚不存在。

有幾個可能的解決方法:

  1. 最簡單的可以爲你只需切換到非命名進口。所以你必須在customer模塊中說requests.Request而不是Request

  2. 更好的選擇是嘗試消除循環依賴。一般來說,循環依賴表示事物耦合過緊。將圓形度拉出到第三個模塊中,或合併兩個模塊。

  3. 第三個選擇,但是這通常被認爲是作風不好,是移動的customer進口內requests下面Request類的定義。 再一次,這是不好的風格,我不推薦它。我只是爲了完整而提到它,但如果你這樣做,你幾乎肯定會後悔的。

+1

緊密耦合,或只是設計不良/有組織。 –