2017-01-25 46 views
-1

我試圖瞭解如何訪問和增加駐留在另一個腳本內的整數。我的層次結構是這樣的:從其他腳本遞增整數

- TestDirectory 
-- foo.py 
-- bar.py 

例子:

foo.py

import TestDirectory.bar as bar 
def main(): 
    testCounter = 0 
    bar.increment() 
    print(testCounter) 

main() 

bar.py

import TestDirectory.foo as foo 
def increment(): 
    foo.main().testCounter += 1 

我希望我的打印返回1,但它給了我一個錯誤:

AttributeError: module 'TestDirectory' has no attribute 'bar' 

誰能解釋或解決我的問題?

+1

無論如何,這是行不通的。但你面對的問題是我認爲的循環進口。 –

+0

除了循環導入問題外,我無法重現此錯誤。當我嘗試從TestDirectory外部運行它時,我得到一個名爲'TestDirectory'的'ImportError:No'模塊。 –

+0

但是你有一個想法如何解決這樣的問題? – Anonymous

回答

0

發佈我的解決方案,以幫助任何有需要的其他人!

數字體系是這樣的(即使它不應該的問題):

- Folder1 
-- bar.py 
- Folder2 
-- foo.py 

解決方案:

foo.py

from Folder1 import bar 
def main(): 
    bar.increment() 
    print(bar.counter) 

main() 

吧。 py

counter = 0 
def increment(): 
    global counter 
    counter += 1 
1

儘管我無法重現您的錯誤(並不重要),但您似乎在循環導入中遇到了混亂。

一個簡單的方法來繞過你的情況的循環問題如下:

  • bar.py,修改increment功能的行爲採取int作爲輸入參數,並更新之後返回。
  • foo.py中,更新main發送testCounter作爲參數並捕獲其返回值。
  • 糾正foo.py(取決於您的約定)中的導入聲明,同時刪除bar.py中的循環導入。

這是我對這個問題進行了簡單的代碼更改。
P.S:從TestDirectory文件夾內運行。

foo.py

import bar 

def main(): 
    testCounter = 0 
    testCounter = bar.increment(testCounter) 
    print(testCounter) 

main() 

bar.py

def increment(testCounter): 
    testCounter += 1 
    return testCounter 
0

大量的與您的代碼的問題:

  1. 變量的方法是局部的方法,你不能從函數之外訪問它們,fo rget關於腳本外部(即,模塊)
  2. 要導入另一個模塊在同一個文件夾,只需使用腳本本身的名稱
  3. 既然你想從foo訪問來自barfoobar,你最終可以與避免循環進口本地進口

這裏是你的問題的解決方案,但有機會,你會用設計改變什麼,而不是我「米祭做的更好:

foo.py

import bar 

testCounter=0 

if __name__=="__main__": 
    bar.incrementTestCounter() 
    print bar.getTestCounterValue() 

bar.py

def incrementTestCounter(): 
    import foo 
    foo.testCounter=foo.testCounter+1 

def getTestCounterValue(): 
    import foo 
    return foo.testCounter