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

如何修复使用ANSI代码格式化print函数时的异常输出问题

问题修复:ANSI颜色转义序列在rich print中失效

问题现象

单独使用print(f"\033[32m{newDict[0][1]}\033[0m")可以正常为字典值添加颜色打印,但将该逻辑放入函数的for循环后,输出异常,转义字符被当作普通文本显示,错误输出示例:

| [39m_[0m [39m_[0m [39m_[0m [39m_[0m [39m_[0m |
 | [39m_[0m [39m_[0m [39m_[0m [39m_[0m [39m_[0m |

错误原因

你导入了from rich import print,rich库的print函数有自己的格式化系统,它不会解析原生的ANSI转义序列(\033[xxm),而是将其作为普通字符串输出,导致转义字符直接显示在终端中。

修复方案

有两种可行的修复方式:

方式1:改用原生Python print函数

移除from rich import print的导入,使用Python默认的print函数,原生print可以正常解析ANSI转义序列。

修改后的boardprint函数无需改动,只需调整导入语句:

# 移除 from rich import print,改用默认print
import random

testList = ["PRICE"]
word = random.choice(testList)
# ... 其余代码不变

方式2:使用rich库的原生语法设置颜色

如果需要保留rich的其他功能,可以用rich的标记语法来设置颜色,替换ANSI转义序列:

修改boardprint函数如下:

def boardprint(color):
    global board
    # 定义rich颜色映射:39是默认灰色,32是绿色,33是黄色
    color_map = {
        39: "dim white",
        32: "green",
        33: "yellow"
    }
    for x in range(6):
        # 用rich的标记语法生成每个格子的带色文本
        cells = [
            f"[{color_map.get(c, 'dim white')}]{board[x+1][i]}[/]" 
            for i, c in enumerate(color)
        ]
        print(" |", *cells, "|")

同时,在checkRight函数中需要正确设置colorList的颜色值:

# 绿色对应32,黄色对应33,默认灰色39
if guess[x].upper() == word[x]: # green
    print("green")
    letter = guess[x]
    updateRow.append(str(letter))
    colorList[x] = 32  # 改为32对应绿色
elif guess[x].upper() in word and result[guess[x]] == 0: # yellow
    print("Yellow")
    letter = guess[x]
    updateRow.append(letter)
    colorList[x] = 33  # 改为33对应黄色
else: # grey
    print("grey")
    letter = guess[x]
    updateRow.append(letter)
    colorList[x] = 39  # 默认灰色

完整修复后代码(方式2示例)

from rich import print
import random

testList = ["PRICE"]
word = random.choice(testList)

board = {
    6 : ["_", "_", "_", "_", "_"],
    5 : ["_", "_", "_", "_", "_"],
    4 : ["_", "_", "_", "_", "_"],
    3 : ["_", "_", "_", "_", "_"],
    2 : ["_", "_", "_", "_", "_"],
    1 : ["_", "_", "_", "_", "_"],
}

def boardprint(color):
    global board
    color_map = {
        39: "dim white",
        32: "green",
        33: "yellow"
    }
    for x in range(6):
        cells = [
            f"[{color_map.get(c, 'dim white')}]{board[x+1][i]}[/]" 
            for i, c in enumerate(color)
        ]
        print(" |", *cells, "|")

guess = ""
def ask():
    global guess
    print("hello! welcome to [bold green]WORDLE[/bold green]")
    print("\tTry to guess a 5-letter word in 6 guesses or less.\n\t\tIf a letter is [green]green[/green], then it is in the right place,\n\t\tIf a letter is [yellow]yellow[/yellow], then it is in the wrong place, \n\t\tif a letter is [black]grey[/black], then it is the wrong letter.")
    print()
    guess = input("FIRST GUESS  > ").upper()
    guess = list(guess)
    return guess

colorList = [39, 39, 39, 39, 39]
def checkRight(guess, word, row):
    global board, colorList

    GuessCheckDouble = {i:guess.count(i) for i in guess}
    WordCheckDouble = {i:word.count(i) for i in word}
    result = {key: GuessCheckDouble[key] - WordCheckDouble.get(key, 0) for key in GuessCheckDouble.keys()}
    updateRow = []

    for x in range(len(word)):
        if guess[x].upper() == word[x]: # green
            print("green")
            letter = guess[x]
            updateRow.append(str(letter))
            colorList[x] = 32
        elif guess[x].upper() in word and result[guess[x]] == 0: # yellow
            print("Yellow")
            letter = guess[x]
            updateRow.append(letter)
            colorList[x] = 33
        else: # grey
            print("grey")
            letter = guess[x]
            updateRow.append(letter)
            colorList[x] = 39

    board.update({row : [updateRow[0], updateRow[1], updateRow[2], updateRow[3], updateRow[4]]})
    boardprint(colorList)
    return board, colorList

word = word.upper()
word = list(word)

boardprint(colorList)
ask()
print(guess)

checkRight(guess, word, 1)
print(word)
print(board)
boardprint(colorList)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:57:10