print 列印是会调用对象 __str_ 方法,输出方法返回值,当然返回值必须是 str,内置对象例如int,list,dict,bool等等都已经实现了这个方法,当然如果没实现这个方法,会默认输出对象名称和内存ID。

单独列印这些对象都不会有这个问题,但是你将两个对象用 + 连接起来,+ 会调用+前面对象的 __add__ 方法,str的+是连接字元串,返回值是str,list的+是扩展列表,返回值是list。这里你用 str+list,不同类型的变数当然不能直接+。

如果相同时输出两个不同类型变数的值,可以像下面这样,不同变数用「,」隔开

print("here ......",cars)


其实错误提示已经讲得很清楚:出现了类型错误 -- 只能连接字元串到字元串,而不能将列表连接到字元串。

问题就出在加号的使用上,这句提示就是针对加号来说的,就是说不能将字元串和列表「加」在一起:cars 是列表, 用 sorted() 函数来排序后的 sorted(cars) 还是列表,print ("He is ..." + sorted(cars)) 就是将字元串和列表「加」在一起了,所以会报错。

上面说了,字元串可以连接(「加」)到字元串, str (sorted(cars)) 就是将排序好的列表整体「变成」了一个字元串,即 "[a, b, c, d]" , 所以 print(" here is ..." + str (sorted(cars))) 就可以顺利显示了。

而 print(sorted(cars)) 与 print(cars) 原理是一样的,能够顺利显示肯定没有什么好奇怪的。

就像其他朋友所说的,要想将不同类型的对象放在一起(注意是放在一起,而不是连接或者「加」在一起)来显示(print),可以使用英文的逗号,比如您将上面的例子改为 print("He is ... " , sorted(cars)) 就能够顺利显示了。

这些规则是发明者制定的,使用者只能乖乖地遵守了,否则机器肯定不让您通过,呵呵。

再次谢邀,祝顺利、愉快。


这不是print的问题,print函数你放进去什么都可以列印,因为在列印的时候会自动转为str。

上面报错的原因是把字元串"Here is the sorted list :"与后面的列表sorted(cars)相加,字元串与列表是不能相加的,所以报错。而后面直接列印列表是允许的


+号连接的是字元串和字元串。上面那个,后面部分是list,所以报错了。下面那个是因为你把后面部分的list用str强制类型转换成字元串了,所以能够用+号连接。这跟print没什么关系。


报错信息很明显,只能str和str拼接

str和list拼接需要强制转换为相同类型,就这样


推荐阅读:
相关文章