我目前正在做我的第一個python工作,修改了一些朋友編寫的代碼。我正在使用python 2.6.6。最初的一段代碼可以從信用卡捐贈數據的日誌文件中提取信息給我的公益組織。我的新版本,如果它有一天工作,將執行相同的任務,由貝寶做的捐贈。日誌文件相似,但具有不同的字段名稱和其他差異。神祕的''str'對象不可調用「python error
我收到錯誤消息是:
回溯(最近通話最後一個): 文件 「../logparse-paypal-1.py」,線路196,在 convert_log( sys.argv [1],sys.argv [2],access_ids) 文件「../logparse-paypal-1.py」,第170行,在convert_log中 output = [f(record,access_ids)for f in output_fns ] 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_fns F F(記錄,access_ids)]和線196是這樣的一種: convert_log(sys.argv中[1],sys.argv中[2],access_ids)
的access_ids定義,possib LY相關的問題,是這樣的:
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
預先感謝任何與此建議。
- 戴夫
您可以發佈一個顯示問題的[* complete *](http://sscce.org/#selfcon)測試程序嗎?很可能,'output_fn'的值是問題。 – phihag
我認爲你的問題是output_fns是一個字符串列表。因此,在列表理解語句的上下文中,f()不是一個函數,而是一個字符串。嘗試在行170「print'%s'%output_fns」 – user590028
@ user590028之前添加以下打印語句,我添加了該行。這是我現在得到的消息: 文件「../logparse-paypal-1.py」,線170,在convert_log 打印‘%s’的%output_fns 類型錯誤:不串轉換過程中的所有參數格式 –