You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用str.maketrans实现字符替换时报参数长度不等错误

问题背景

需要实现输入字符串的自定义字符替换:将字符e替换为ᴇ、t替换为ᴛ,例如输入test时期望输出ᴛᴇsᴛ。编写代码运行时触发报错:

ValueError: the first two maketrans arguments must have equal length
即str.maketrans方法要求前两个传入参数长度必须相等。

出错的代码如下:

'''
Qǫ Ww Eᴇ Rʀ Tᴛ Yʏ Uᴜ i Oᴏ Pᴘ
α Ŝ̬ Dᴅ Fғ Gɢ Hʜ Jj Kᴋ Lʟ
Zᴢ X Vᴠ β Nɴ Mᴍ 𓅱
'''

x = "qertyuIpaAsSdfghklxbBnm."
y = "ǫᴇʀᴛʏᴜiᴘααŜ̬Ŝ̬ᴅғɢʜᴋʟXββɴᴍ𓅱"
trans = str.maketrans(x, y)
text = input("Write your sentence: ")
print (text.translate(trans))
报错根因

str.maketrans(x, y)的映射规则是位置一一对应:x中第n位的字符,替换为y中第n位的字符,因此要求两个字符串的长度必须完全相等。
本次长度不匹配的核心原因是y中的Ŝ̬是组合字符:由基础字符Ŝ和下方的组合变音符号̬两个Unicode码位组成,在Python中统计长度时单个视觉上的Ŝ̬占2个字符位。代码中y里写了2个Ŝ̬,直接比等长的映射需求多了2个字符位:实际x长度为24,y长度为26,自然触发报错。

修复方法

不要用两个平行字符串写映射,改用字典作为str.maketrans的入参,键为待替换的原字符,值为替换后的目标字符,从根源上避免等长校验问题,也不会被组合字符的码位长度坑到,映射关系也更清晰易维护。
修复后的可运行代码:

char_map = {
    'q': 'ǫ', 'Q': 'ǫ',
    'e': 'ᴇ', 'E': 'ᴇ',
    'r': 'ʀ', 'R': 'ʀ',
    't': 'ᴛ', 'T': 'ᴛ',
    'y': 'ʏ', 'Y': 'ʏ',
    'u': 'ᴜ', 'U': 'ᴜ',
    'i': 'i', 'I': 'i',
    'o': 'ᴏ', 'O': 'ᴏ',
    'p': 'ᴘ', 'P': 'ᴘ',
    'a': 'α', 'A': 'α',
    's': 'Ŝ̬', 'S': 'Ŝ̬',
    'd': 'ᴅ', 'D': 'ᴅ',
    'f': 'ғ', 'F': 'ғ',
    'g': 'ɢ', 'G': 'ɢ',
    'h': 'ʜ', 'H': 'ʜ',
    'k': 'ᴋ', 'K': 'ᴋ',
    'l': 'ʟ', 'L': 'ʟ',
    'x': 'x', 'X': 'x',
    'v': 'ᴠ', 'V': 'ᴠ',
    'b': 'β', 'B': 'β',
    'n': 'ɴ', 'N': 'ɴ',
    'm': 'ᴍ', 'M': 'ᴍ',
    '.': '𓅱'
}
trans = str.maketrans(char_map)
text = input("Write your sentence: ")
print(text.translate(trans))

运行代码输入test即可得到预期输出ᴛᴇsᴛ,无长度报错。

内容的提问来源于stack exchange,提问作者Daffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:06:30