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

Python中修改prompt_toolkit提示框占位符颜色及解决TypeError报错

修复prompt_toolkit提示框的TypeError错误

错误原因分析

  1. 最初代码里,prompt_text是一个列表,其中元组的第二个元素是HTML对象,但FormattedText格式的列表要求每个元组必须是(样式字符串,文本字符串)的组合,HTML对象不属于可迭代的字符串类型,因此触发TypeError。
  2. 直接传递HTML对象给placeholder参数时,部分prompt_toolkit版本无法直接解析,需要先转换成标准的FormattedText格式。

修复方案

方案1:直接使用HTML对象作为提示文本(推荐)

利用prompt函数直接支持HTML对象的特性,简化代码同时解决类型问题:

from prompt_toolkit import prompt
from prompt_toolkit.formatted_text import HTML

def get_input():
    # 直接用HTML定义带样式的提示前缀
    prompt_text = HTML('<ansired><b>your input > </b></ansired>')
    # 给占位符添加灰色样式,更符合视觉习惯
    placeholder = HTML('<b><ansigray>enter `q` or `exit` to exit </ansigray></b>')
    return prompt(prompt_text, placeholder=placeholder, default='').lower()

方案2:显式转换为FormattedText格式

如果需要更精细的样式控制,可将HTML对象转换为FormattedText的列表格式:

from prompt_toolkit import prompt
from prompt_toolkit.formatted_text import HTML

def get_input():
    # 将HTML转换为FormattedText列表
    prompt_text = HTML('<ansired><b>your input > </b></ansired>').to_formatted_text()
    placeholder = HTML('<b><ansigray>enter `q` or `exit` to exit </ansigray></b>').to_formatted_text()
    return prompt(prompt_text, placeholder=placeholder, default='').lower()

关键说明

  • 不要在FormattedText列表中嵌套HTML对象,必须确保每个元组的文本部分是字符串类型。
  • 若要给占位符设置颜色,可使用prompt_toolkit支持的ANSI颜色标签(如<ansigray>、<ansiblue>等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:20