我编写了一个函数,该函数在一列中包含一些原始数字数据并将其转换为适当的分钟(它是一个csv文件)。所有的列都保存为字符串,如果我需要与它们争吵,因为字符串使它更容易。但是,当将某些数据转换为时间格式(再次在字符串中)时,我会收到标题中描述的错误。我的功能如下所示:
def duration_in_mins(row, city):
duration = [] # Make an empty list
form = '%M.%S'
if city == 'X':
city_file = open('X.csv')
city_csv = csv.reader(city_file)
for row in city_csv:
duration.append(row[1]) # The column that contains the strings
for i in duration:
datetime.datetime.fromtimestamp(i).strftime(form, 'minutes') # Conversion
else:
return 'Error'
return duration
当我运行datetime.datetime.fromtimestamp(i).strftime(form, 'minutes')
时,行duration_in_mins()
是我根据追溯得到错误的地方。回溯告诉我先将字符串转换为数字然后转换为时间吗? datetime不能直接将字符串转换为时间吗?
duration_in_mins(5, 'X)
line 39, in duration_in_mins
datetime.datetime.fromtimestamp(i).strptime(form, 'minutes')
TypeError: an integer is required (got type str)
首先,您的代码与报告的错误之间存在不一致:
datetime.datetime.fromtimestamp(i).strftime(form, 'minutes') # Conversion
和
line 39, in duration_in_mins
datetime.datetime.fromtimestamp(i).strptime(form, 'minutes')
TypeError: an integer is required (got type str)
请注意strptime
与strftime
不同
然后,您应该使用错误拆分该行以了解究竟导致异常的函数:
x = datetime.datetime.fromtimestamp(i)
x.strftime(form, 'minutes') # Conversion
你可能会看到错误来自fromtimestamp(ts)
,它需要一个整数时间戳参数而不是str。
在某些时候将此参数转换为int,一切都应该没问题。
正如你所说,datetime.fromtimestamp()
需要一个数字,但你给它一个字符串。 Python有一个哲学“面对歧义,拒绝猜测的诱惑”,所以如果你给一个函数一个错误类型的对象,它将抛出异常。
代码的其他问题:
strftime()
方法只接受一个参数,但是你传递第二个参数。duration
时,您都会将列表中的所有值转换为时间,然后如果转换确实有效,则只是丢弃转换结果而不将其保存在任何位置。