2017-02-11 6 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 line, ни elif '@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

 Смежные вопросы

  • Нет связанных вопросов^_^