我编写了一个函数,它接受一行中的某列中包含一些原始数值数据,并将其转换为适当的分钟数(它是一个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)
首先,您的代码与报告的错误不一致:
以及
请注意
strptime
与strftime
不同然后,您应该使用错误拆分行,以了解究竟是什么函数导致了异常:
您可能会看到错误来自^{} ,它需要一个整数时间戳参数而不是str
在某个时候将这个参数转换为int,一切都应该正常。
正如您所说,
datetime.fromtimestamp()
需要一个数字,但您给它一个字符串。Python有一种哲学,“面对模棱两可的情况,拒绝猜测的诱惑”,因此如果给函数一个错误类型的对象,它将抛出异常。代码的其他问题:
strftime()
方法只接受一个参数,但是 再传一次。还有,你是不是想把这些环套起来?每次你附加一个 值到
duration
将列表中的所有值转换为时间,并且 如果转换成功了,你就把结果扔掉了 把它保存在任何地方。相关问题 更多 >
编程相关推荐