2015-07-01 1 views
1

Я пытаюсь передать секцию строки под функцию python под ней Я не уверен, почему я вижу эту ошибку. Мое понимание этого заключается в том, что он не получает строку, где она ожидается. Я пробовал кастинг, но это тоже не работает. Как я могу решить эту проблему или получить дополнительную информацию об отладке?Лучшая отладка: ожидаемый объект буфера символов

section = str('[log]') 
some_var = 'filename =' 

edit_ini('./bench_config.ini', section, some_var, 'logs/ops_log_1') 

Функция вызывает ошибку

def edit_ini(filename, section, some_var, value): 

    section = False 

    flist = open(filename, 'r').readlines() 

    f = open(filename+'test', 'w') 

    for line in flist: 
      line = str(line) 
      print line 
      if line.startswith(section): 
        section = True 
        if(section == True): 
          if(line.startswith(some_var)): 
            modified = "%s = $s", variable, value 
            print >> f, modified 
          section = False 
      else: 
        print >> f, line 
    f.close() 

Однако я вижу ошибку:

Traceback (most recent call last): 
    File "bench.py", line 89, in <module> 
    edit_ini('./config.ini', section, some_var, 'logs/log_1') 
    File "bench.py", line 68, in edit_ini 
    if line.startswith(section): 
TypeError: expected a character buffer object 

ответ

0

перезаписывается переданное в section с section=False. Ошибка связана с тем, что вы не можете позвонить string.startswith(False).

Способ отладки python заключается в использовании pdb. Это помогло бы вам найти вашу проблему здесь. Вы должны прочитать спецификацию, но есть краткое руководство по использованию pdb.

import pdb 
# your code ... 
pdb.set_trace() # put this right before line.startswith(section) 

Затем, когда вы запускаете свой код, вы выполняете его прямо перед сбоем. Затем вы можете напечатать section в pdb и посмотреть, что это False, а затем попытайтесь выяснить, почему это False.

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