datetime.date:TypeError:需要一个整数。为什么?

时间:2013-11-26 05:05:27

标签: python class dictionary

class Photo:
    'Fields: size, pdate'
    def __init__(self, size, pdate):
        self.size = size
        self.pdate = pdate

def create_photo_name_dict(pdel):
    photo_dictionary = {}
    for photo in pdel:
        photo_dictionary[photo[0]] = Photo(photo[1],datetime.date(photo[2:]).isoformat())
    return photo_dictionary

create_photo_name_dict([["DSC315.JPG",55,2011,11,13],["DSC316.JPG",53,2011,11,12]])

这会产生TypeError: an integer is required。有什么问题?

2 个答案:

答案 0 :(得分:6)

datetime.date需要一个整数作为参数。使用photo[2:]您正在传递一个切片,这是一个列表。因此错误。

要解决此问题,请解压缩列表:

photo_dictionary[photo[0]] = Photo(photo[1],datetime.date(*photo[2:]).isoformat())

以下是一个例子:

>>> datetime.date([2010,8, 7])

Traceback (most recent call last):
  File "<pyshell#71>", line 1, in <module>
    datetime.date([2010,8, 7])
TypeError: an integer is required
>>> datetime.date(*[2010,8, 7])
datetime.date(2010, 8, 7)

答案 1 :(得分:-1)

photo_dictionary[photo[0]] = Photo(photo[1],datetime.date(photo[2:]).isoformat())

在这里,您将在photo[0]中收到字符串..您需要使用int(photo[0])对其进行类型转换。

同时检查您是否以photo[0]格式获得int string

photo_dictionary[int(photo[0])] = Photo(photo[1],datetime.date(photo[2:]).isoformat())