2017-04-21 113 views
-1

所以,我想要做的是:在文件a.py中調用b.py中的函數foo(),然後它將更改a.py中的變量的值。這是我得到的錯誤:通信之間的兩個

AttributeError: module 'b' has no attribute 'foo'

我在做什麼錯?什麼是正確的方法來做到這一點?

+1

你有一個cicular import ... –

+0

都是在同一個位置的文件嗎? –

+0

是的。將其中任一個導入到一個。這將解決您的問題。 –

回答

1

您的import is circular。你需要想出一個非循環導入的測試方法。例如創建一個您執行的新主文件;進口a.ab.foo有:

main.py

from b import foo 
import a 

a.a = 7 
foo() 

a.py

a = 0 

b.py

import a 

def foo(): 
    a.a=4 
+0

但是,如何解決b.py中的變量'a'呢? – Njubster

+0

@Njubster增加了一個例子。 –

+0

那麼,這是否意味着我要求的東西在沒有第三個文件的情況下是不可行的? – Njubster

0

首要的事情是使圓形的進口,並修復它是不是一個好理念。

但是嘗試在你的代碼中做小的改動並解決。

a.py:

from b import foo 

a = 0 
foo() 
print a 

b.py:

def foo(): 
    import a as filea 
    filea.a=4 

當您運行a.py,看print a,它正在執行兩次。你需要承擔自己的風險,以確定很多這樣的事情。 而不是做所有馬戲團,最好避免循環進口。

+0

我很好奇,有什麼風險? – Njubster

+0

所有你的全局變量'a.py'將被多次調用是一點。 – Haranadh

+0

@Njubster您可以嘗試使用'pycharm',並逐步調試,並查看流程,您將更清楚,發生了什麼,使用這兩個文件代碼。 – Haranadh