2014-06-27 86 views
0

雖然我specyfing變量作爲global這樣的函數內部:Python不能看到全局變量

def SECdownload(year, month): 
    import os 
    from urllib.request import urlopen 
    root = None 
    feedFile = None 
    feedData = None 
    good_read = False 
    itemIndex = 0 
    edgarFilingsFeed = 'http://www.sec.gov/Archives/edgar/monthly/xbrlrss-' + str(year) + '-' + str(month).zfill(2) + '.xml' 
    return edgarFilingsFeed 
    #print(edgarFilingsFeed) #from the slides 
    if not os.path.exists("sec/" + str(year)): 
     os.makedirs("sec/" + str(year)) 
    if not os.path.exists("sec/" + str(year) + '/' + str(month).zfill(2)): 
     os.makedirs("sec/" + str(year) + '/' + str(month).zfill(2)) 
    global target_dir 
    target_dir = "sec/" + str(year) + '/' + str(month).zfill(2) + '/' 

然後我輸入的功能,然後在Python UI(Windows)中運行它,就像這樣:

>>> from df import SECdownload 
>>> SECdownload(2012,4) 

爲什麼當我在這個殼類型變量target_dir我得到:

>>> target_dir 
Traceback (most recent call last): 
File "<pyshell#6>", line 1, in <module> 
    target_dir 

NameError: name 'target_dir' is not defined 

這怎麼可能當我明確說明裏面的功能variableglobal

+0

我會把'global target_dir'行放在函數聲明中......也許這就是問題 – ExoticBirdsMerchant

+0

通過使用返回,你從執行中排除了一切。 – billpcs

回答

1

功能在其中創建它們的環境中工作。也就是說,他們使用的任何全局是本地的,該功能在創建的模塊

例如:

m.py:

def a(val): 
    global x 
    x = val 

main.py

from m import a 
a(10) 
import m 
print(m.x) 

產生10

1

您的代碼處理全局變量是不可訪問,因爲這行:

return edgarFilingsFeed 
+0

ohhh但不是行'target_dir =「sec /」+ str(year)+'/'+ str(month).zfill(2)+'/''無論如何被讀取?否則,當我運行模塊時它如何創建目錄?我必須承認,這肯定是問題 – ExoticBirdsMerchant

+0

我懷疑它是用你給我們展示的代碼創建一個目錄。 –

+0

哦,我明白了!它只是在那裏是目錄完全丟失(未經測試) – ExoticBirdsMerchant