为什么在Python 3.1中string.maketrans无效?

20 投票
9 回答
60117 浏览
提问于 2025-04-15 23:54

我刚开始学Python。

为什么这个在Python 3.1里不管用呢?

from string import maketrans   # Required to call maketrans function.

intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)

str = "this is string example....wow!!!";
print str.translate(trantab);

当我运行上面的代码时,得到的结果是:

Traceback (most recent call last):
  File "<pyshell#119>", line 1, in <module>
    transtab = maketrans(intab, outtab)
  File "/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/string.py", line 60, in maketrans
    raise TypeError("maketrans arguments must be bytes objects")
TypeError: maketrans arguments must be bytes objects

“必须是字节对象”这句话是什么意思?如果可能的话,有人能帮我发一段在Python 3.1里能用的代码吗?

9 个回答

16

别再通过阅读Python 2的文档来学习Python 3了。

intab = 'aeiou'
outtab = '12345'

s = 'this is string example....wow!!!'

print(s.translate({ord(x): y for (x, y) in zip(intab, outtab)}))
36

你不需要使用 bytes.maketrans(),因为用 str 会更简单,而且不需要加上'b'前缀:

print("Swap vowels for numbers.".translate(str.maketrans('aeiou', '12345')))
11

字符串不是字节。

这是Python 3中的一个简单定义。

字符串是Unicode(这不是字节),Unicode字符串用"..."'...'表示。

字节就是字节(这不是字符串),字节字符串用b"..."b'...'表示。

使用b"aeiou"可以创建一个由某些字母的ASCII码组成的字节序列。

撰写回答