TypeError:无法转换' list'隐含地反对str

时间:2014-08-23 10:02:21

标签: python python-3.x

我有python类:

class Athlete:
    def __init__(self,fullName,dob,times):
        self.fullName = fullName
        self.dob = dob
        self.times = times
    ##  print('times is ',times)

    def __str__(self):
        return ''.join("Athlete[fullName="+self.fullName +",dob="+self.dob+",sortedTimes="+self.sortedTimes+"]")

    def __repr__(self):
        return self.__str__()

此类的实例作为值存储在地图athleteMap中。

当我print(athleteMap)时,我收到此错误:

File "D:/Software/ws/python_ws/collections\athleteList.py", line 11, in __str__
    return ''.join("Athlete[fullName="+self.fullName +",dob="+self.dob+",sortedTimes="+self.sortedTimes+"]")
TypeError: Can't convert 'list' object to str implicitly

我需要在print方法中打印Athlete实例。

如何在python中执行此操作?

2 个答案:

答案 0 :(得分:2)

明确地将times转换为字符串:

return "Athlete[fullName=" + self.fullName  + ",dob=" + self.dob + ",sortedTimes=" + str(self.sortedTimes) + ']'

此处您不需要''.join()

更好的选择是使用字符串格式:

return "Athlete[fullName={0.fullName},dob={0.dob},sortedTimes={0.sortedTimes}]".format(self)

答案 1 :(得分:1)

您的join电话没有意义。你可能想要这样的东西:

def __str__(self):
    return "Athlete[fullName="
        + str(self.fullName)
        + ",dob="
        + str(self.dob)
        + ",sortedTimes="
        + str(self.sortedTimes)
        + "]"

我已将str添加到每个属性中,因为我无法确定您将哪一个放入list。问题从错误中可见 - 列表无法隐式转换为字符串 - 您需要通过str()调用显式标记此转换。您的一个属性(最可能是dobtimes)是一个列表。