为什么join()不自动将参数转换为字符串?什么时候不希望它们是字符串?

15 投票
3 回答
1545 浏览
提问于 2025-04-17 20:39

我们有一个列表:

myList = [1, "two"]

然后想把它打印出来,通常我会用类似这样的方式:

"{0} and {1}".format(*myList)

但你也可以这样做:

" and ".join(myList)

可惜的是:

>>> " and ".join(myList)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found

为什么它不直接把收到的列表自动转换成字符串呢?

在什么情况下你会不需要它转换成字符串?难道我遗漏了什么小细节吗?

3 个回答

0

在Python编程中,使用正确的数据类型是很重要的。像print这样的内置函数会自动进行类型转换(前提是这个类支持__str__方法),所以你应该在这里进行处理:

print来完成这个工作:

print(*myList, sep = " and ")

以上是针对Python 3的,如果你还在使用Python 2,那么请使用:

from __future__ import print_function
3

当你试图执行像 x = 4 + "8" 这样的代码时,会遇到一个问题,那就是这个表达的意思不太明确。我们不知道 x 应该是 "48"(把 4 转换成字符串)还是 12(把 "8" 转换成数字)。这两种结果都没有办法说得通。

为了避免这种混淆,Python 要求你必须明确地转换其中一个操作数:

>>> x = str(4) + "8"
>>> y = 4 + int("8")
>>> print x
48
>>> print y
12
14

来自Python之禅的内容:

明确比隐含要好。

还有一句:

错误不应该被默默忽略。

如果在转换成字符串时不明确地进行操作,可能会隐藏一些错误。我希望能清楚地知道,是否在某个地方突然出现了不同类型的数据,而这些数据本来应该是字符串。

如果你想明确地将数据转换为字符串,可以使用map()这个方法,举个例子:

''.join(map(str, myList))

撰写回答