2016-06-28 91 views
0

我無法通過這個簡單的代碼片段:Python:需要整數。哪裏?爲什麼?

for i, row in enumerate(rows): 
    row["last_check"] = last_check_ts 
    row_filtered = { 
     k: v.replace('\r', '') for k, v in row.iteritems() if v is not None 
    } 

它給了我下面的錯誤:

k: v.replace('\r', '') for k, v in row.iteritems() if v is not None 
TypeError: an integer is required 

我在做什麼錯?究竟是什麼應該是一個整數?

編輯:

這是rows的樣子印在控制檯:

[{'COD_PER_FISICA': None, 'INCLUIDO_POR': 'FU', 'MODIFICADO_POR': None, 'ES_FISICA': 'N', 'COD_PERSONA': '37470', 'NOMBRE': 'BLABLA', 'COD_PER_JURIDICA': '37470', 'FECHA_MODIFICACION': None, 'FECHA_INCLUSION': datetime.datetime(2003, 6, 7, 18, 22, 13)}, 
{'COD_PER_FISICA': None, 'INCLUIDO_POR': 'FU', 'MODIFICADO_POR': 'FOO', 'ES_FISICA': 'N', 'COD_PERSONA': '37471', 'NOMBRE': 'blablabla', 'COD_PER_JURIDICA': '37471', 'FECHA_MODIFICACION': datetime.datetime(2003, 9, 2, 12, 14, 35), 'FECHA_INCLUSION': datetime.datetime(2003, 6, 7, 18, 22, 13)}, 
{'COD_PER_FISICA': None, 'INCLUIDO_POR': 'FU', 'MODIFICADO_POR': None, 'ES_FISICA': 'N', 'COD_PERSONA': '37472', 'NOMBRE': 'blablabala', 'COD_PER_JURIDICA': '37472', 'FECHA_MODIFICACION': None, 'FECHA_INCLUSION': datetime.datetime(2003, 6, 7, 18, 22, 13)}, 
{'COD_PER_FISICA': None, 'INCLUIDO_POR': 'FU', 'MODIFICADO_POR': None, 'ES_FISICA': 'N', 'COD_PERSONA': '37473', 'NOMBRE': 'blablabla', 'COD_PER_JURIDICA': '37473', 'FECHA_MODIFICACION': None, 'FECHA_INCLUSION': datetime.datetime(2003, 6, 7, 18, 22, 13)}, 
{'COD_PER_FISICA': None, 'INCLUIDO_POR': 'FU', 'MODIFICADO_POR': 'blablablaA', 'ES_FISICA': 'N', 'COD_PERSONA': '37474', 'NOMBRE': 'blablabla', 'COD_PER_JURIDICA': '37474', 'FECHA_MODIFICACION': datetime.datetime(2003, 9, 2, 12, 14, 19), 'FECHA_INCLUSION': datetime.datetime(2003, 6, 7, 18, 22, 13)}] 
+0

你可以發佈原始數據集嗎? –

+0

這是通過循環第一次發生嗎?它可能有助於在循環開始時轉儲出'i'來跟蹤。此外,它可能有助於將列表理解分解爲離散的for循環。 –

回答

6

移動這一行:

row["last_check"] = last_check_ts 

下面您的字典理解。您可以重現此如下:

from datetime import datetime 
rows = {'a': None, 'b': 'some_str\r', 'c': datetime.utcnow()} 
{k: v.replace('\r', '') for k, v in rows.items() if v is not None} 

你之前添加時間戳到您的字典遍歷它,你打電話v.replace('\r', '')v對象實際上是一個日期時間的時代,這樣一個。 datetime對象確實有一個replace方法,但是您將它視爲一個字符串,因此將其用錯誤的簽名進行調用。

+2

由於問題中的信息不完整,所以明智的推論。 –

+0

我已經更新了我的問題,顯示'行'的內容只是爲了澄清。 – Xar

+2

僅僅用一個檢查對象是一個字符串來包裝'v.replace'調用會更有意義嗎?例如,如果在Python 2.x中使用isinstance(v,basestring)else v',則v.replace('\ r',''); 'v.replace('\ r','')如果Python 3.x中的isinstance(v,str)else v'。那樣會更強大,因爲那樣你就可以防範碰巧在行中的任何其他流氓數據類型。 – jpmc26