更好的调试:需要一个字符缓冲区对象

Better debugging: expected a character buffer object

我正在尝试将字符串部分传递给它下面的 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

您用 section=False 覆盖传入的 section。错误是因为你不能调用 string.startswith( False ).

调试 python 的一种方法是使用 pdb。这会帮助您在这里找到问题。您应该阅读规范,但这里有一个关于如何使用 pdb 的快速指南。

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

然后当你运行你的代码时,你会一直执行到失败之前。然后你可以在pdb中打印section,看到是False,然后再想一想为什么是False.