神秘的''str'对象不可调用“python错误

时间:2013-07-12 02:16:25

标签: python-2.6

我目前正在进行我的第一次python工作,修改一些由朋友编写的代码。我使用的是python 2.6.6。最初的代码片段可以从信息卡捐赠给我的公益组织的数据日志文件中提取信息。我的新版本,如果它有一天工作,将执行与paypal所做的捐赠相同的任务。日志文件类似,但具有不同的字段名称和其他差异。


我收到的错误消息是:

追踪(最近一次通话):   文件“../logparse-paypal-1.py”,第196行,in     convert_log(sys.argv [1],sys.argv [2],access_ids)   在convert_log中输入第170行的“../logparse-paypal-1.py”     输出= [f(record,access_ids),用于输出_fns中的f] TypeError:'str'对象不可调用

我已经阅读了此论坛上与此错误消息相关的一些帖子,但到目前为止我还在海上。我找不到与可能的问题对象(access_ids)相关的代码部分和我开始使用的代码之间的任何重大差异。我所做的与access_ids表相关的只是删除了一些行,这些行打印了脚本发现的问题,导致它忽略了一些数据。也许我在做这件事的时候改变了一个角色或东西,但我看了一下,到目前为止找不到任何东西。

产生这些错误消息的代码部分如下:

            # Use the output functions configured above to convert the
            # transaction record into a list of outputs to be emitted to
            # the CSV output file.
            print "Converting %s at %s to CSV" % (record["type"], record["time"])
            output = [f(record, access_ids) for f in output_fns]
            j = 0
            while j < len(output):
                    os.write(csv_fd, output[j])
                    if j < len(output) - 1:
                            os.write(csv_fd, ",")
                    else:
                            os.write(csv_fd, "\n")
                    j += 1
            convert_count += 1

    print "Converted %d approved transactions to CSV format, skipped %d non-approved transactions" % (convert_count, skip_count)

if __name__ == '__main__':
    if len(sys.argv) < 3:
            print "Usage: logparse.py INPUT_FILE OUTPUT_FILE [ACCESS_IDS_FILE]"
            print
            print "  INPUT_FILE        Silent post log containing transaction records (must exist)"
            print "  OUTPUT_FILE       Filename for the CSV file to be created (must not exist, will be created)"
            print "  ACCESS_IDS_FILE   List of Access IDs and email addresses (optional, must exist if specified)"
            sys.exit(-1)

    access_ids = {}
    if len(sys.argv) > 3:
            access_ids = load_access_ids(sys.argv[3])

    convert_log(sys.argv[1], sys.argv[2], access_ids)

第170行就是这一行: output = [f(record,access_ids)for f in output_fns]

和第196行是这一个: convert_log(sys.argv [1],sys.argv [2],access_ids)


可能与问题相关的access_ids定义是:

def access_id_fn(record, access_ids):
        if "payer_email" in record and len(record["payer_email"]) > 0:
                if record["payer_email"] in access_ids:
                        return '"' + access_ids[record["payer_email"]] + '"'
                else:
                        return ""
        else:
                return ""

def load_access_ids(filename):
        print "Loading Access IDs from %s..." % filename
        access_ids = {}
        for line in open(filename, "r"):
                line = line.rstrip()
                access_id, email = [s.strip() for s in line.split(None, 1)]
                if not email_address.match(email):
                        continue
                if email in access_ids:
                        access_ids[string.strip(email)] = string.strip(access_id)
        return access_ids

提前感谢您提出任何建议。

  • 戴夫

1 个答案:

答案 0 :(得分:0)

我手边没有看到任何东西,但你确实提到日志文件是相似的,我认为这意味着两者之间存在差异。

你能发一条线吗?

我会仔细检查日志文件中的数据,并确保您认为正在读取的内容是正确的。这肯定对我来说就像是正在读取一段数据,但某些地方正在破坏代码的期望。