Python 3.6 - 在将一些字符串转换为时间时获取错误'需要一个整数(获得类型str)'

问题描述 投票:-1回答:2

我编写了一个函数,该函数在一列中包含一些原始数字数据并将其转换为适当的分钟(它是一个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)
python string datetime
2个回答
1
投票

首先,您的代码与报告的错误之间存在不一致:

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)

请注意strptimestrftime不同

然后,您应该使用错误拆分该行以了解究竟导致异常的函数:

x = datetime.datetime.fromtimestamp(i)
x.strftime(form, 'minutes') # Conversion

你可能会看到错误来自fromtimestamp(ts),它需要一个整数时间戳参数而不是str。

在某些时候将此参数转换为int,一切都应该没问题。


1
投票

正如你所说,datetime.fromtimestamp()需要一个数字,但你给它一个字符串。 Python有一个哲学“面对歧义,拒绝猜测的诱惑”,所以如果你给一个函数一个错误类型的对象,它将抛出异常。

代码的其他问题:

  • strftime()方法只接受一个参数,但是你传递第二个参数。
  • 另外,你的意思是嵌套这些循环?每次将另一个值附加到duration时,您都会将列表中的所有值转换为时间,然后如果转换确实有效,则只是丢弃转换结果而不将其保存在任何位置。
© www.soinside.com 2019 - 2024. All rights reserved.