2017-02-11 46 views
0

爲什麼下面的代碼工作正常,但一旦它被置於一個功能。它返回意外的結果?代碼不工作一旦投入函數

a_prm = [] 

folder = askdirectory() 
copy = False 

os.chdir(folder) 
for file in glob.glob("*.prm"): 
    with open(file, 'r') as prm: 
     if file[:3] == 'DBA': 
      for line in prm: 
       if '@ATTRIB_DETAIL' in line: 
        copy = True 
       elif '@BITLIST_FILES' in line: 
        copy = False 
       elif copy: 
        print(line.split()[1]) 

要打印的結果的預期。

 if file[:3] == 'DBA': 
      with open(file, 'r') as prm: 
       for line in prm: 
        dimension_parse(line) 

def dimensions_parse(line): 
    flag = False 

    if '@ATTRIB_DETAIL' in line: 
     flag = True 
    elif '@BITLIST_FILES' in line: 
     flag = False 
    elif flag: 
     print(line.split()[1]) 

什麼也沒有返回。

+1

分享該錯誤以及 –

+0

沒有返回。沒有錯誤。 – Keva161

+0

什麼意外呢?函數不會返回,除非明確要求這樣做。 –

回答

0

你重置第二版(函數內)flag(又名copy)值False,而不是在「無程序」的版本,在這裏你將它設置爲僅僅是個開始。

所以行爲是不同的,如果沒有if '@ATTRIB_DETAIL' in lineelif '@BITLIST_FILES' in line:滿意。有一個記憶效應,你不會在第二個版本中重現。

0

根據您的共享代碼,錯誤可以被定義功能,它使用後造成的。
該函數應使用前它被定義。

修改後的代碼。

def dimensions_parse(line): 
    flag = False 

    if '@ATTRIB_DETAIL' in line: 
     flag = True 
    elif '@BITLIST_FILES' in line: 
     flag = False 
    elif flag: 
     print(line.split()[1]) 

if file[:3] == 'DBA': 
      with open(file, 'r') as prm: 
       for line in prm: 
        dimension_parse(line) 
+0

謝謝,我試過這個,但我得到一個列表索引超出範圍錯誤/ – Keva161