【问题标题】:Python 3.6 - getting error 'an integer is required (got type str)' while converting some strings to timePython 3.6 - 将某些字符串转换为时间时出现错误“需要整数(类型为 str)”
【发布时间】:2018-06-01 00:51:10
【问题描述】:

我编写了一个函数,该函数接收在其中一列中有一些原始数字数据的行,并将其转换为适当的分钟数(它是一个 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)

【问题讨论】:

  • 显示错误和跟踪。
  • for row in city_csv: 这看起来不对。你想在这里做什么?
  • 追加 duration 列表以仅包含已读取的原始 csv 文件中的特定列[1]。这就是它应该做的......
  • datetime.fromtimestamp() 需要一个数字参数。所以是的,如果 i 是一个字符串,你需要将它显式地转换为 int 或 float。

标签: python string datetime


【解决方案1】:

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

代码的其他问题:

  • strftime() 方法只接受一个参数,但你是 再传一个。

  • 另外,你的意思是嵌套那些循环吗?每次你追加另一个 值到duration 您将列表中的所有值转换为时间,并且 那么如果转换确实有效,那么您只是丢弃了结果 并没有将其保存在任何地方。

【讨论】:

    【解决方案2】:

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

    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),它需要整数时间戳参数而不是字符串。

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

    【讨论】:

    • 谢谢,我越来越近了。早上回来报告!
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2018-05-05
    相关资源
    最近更新 更多