AttributeError: ‘str’ object has no attribute ‘get’

该报错通常发生在 LiteLLM 从 1.96.0 升级到 1.98.0 后,配置文件(如 config.yaml )中 general_settings.alerting 的 YAML 格式书写不规范(冒号后缺少空格),导致配置被解析成字符串而非列表/字典,最终在启动时触发 AttributeEr

快速结论:该报错通常发生在 LiteLLM 从 1.96.0 升级到 1.98.0 后,配置文件(如 config.yaml)中 general_settings.alerting 的 YAML 格式书写不规范(冒号后缺少空格),导致配置被解析成字符串而非列表/字典,最终在启动时触发 AttributeError: 'str' object has no attribute 'get'。优先检查 general_settings.alerting 的书写格式。

适用环境:Issue 已确认的环境包括:AWS ECS 容器、LiteLLM 1.98.0(1.96.0 正常)、Python 3.13、依赖 Click、使用 PostgreSQL 与 Amazon Bedrock。

最快修复方案:general_settings.alerting:["email"] 改为 general_settings.alerting: ["email"](冒号后加空格),确保 YAML 正确解析。这是 Issue 中用户验证有效的修复方法。

注意事项:该方案已在 Issue 中被用户确认可行;但 Issue 中也提到相关 PR #38194 可能用于增强此类错误的捕获,建议后续版本关注该 PR 是否合入。另外,如果配置中还有其他类似冒号后无空格的写法,建议一并检查。

问题场景

用户在 AWS ECS 容器中运行 LiteLLM 1.98.0,并通过 Bedrock(Amazon Bedrock)连接模型服务。将任务定义从 1.96.0 更新到 1.98.0 后,服务无法启动,CloudWatch 日志中直接输出了完整的 Python 堆栈跟踪,进程退出。

报错原文

AttributeError: 'str' object has no attribute 'get'
File "/app/.venv/bin/litellm", line 10, in <module>
sys.exit(run_server())
~~~~~~~~~~^^
File "/app/.venv/lib/python3.13/site-packages/litellm/proxy/proxy_cli.py", line 1152, in run_server
key_management_settings: Final = general_settings.get("key_management_settings", None)
^^^^^^^^^^^^^^^^^^^^
Traceback (most recent call last):
litellm

原因分析

从 Issue 评论中的对比可以明确:general_settings.alerting:["email"](冒号后无空格)会触发报错,而 general_settings.alerting: ["email"](冒号后有空格)则正常。这是 YAML 语法问题——冒号后缺少空格时,YAML 解析器会把整行解析为字符串而不是键值结构,导致 general_settings 变成 str 类型,后续代码调用 .get() 方法时自然报错。

在 LiteLLM 1.96.0 中可能由于解析逻辑的差异没有明显暴露该问题,升级到 1.98.0 后因配置处理路径变化而触发。可能原因还包括:旧版本中 general_settings 的解析方式容忍了该写法,新版本对配置结构的校验更严格。

环境排查

  • 确认 LiteLLM 版本:从 1.96.0 升级到 1.98.0 后出现报错,先确认实际运行版本是否为 1.98.0。
  • 检查 config.yaml(或通过环境变量/挂载传入的配置文件)中 general_settings 段落的 YAML 写法,特别注意冒号后是否有空格。
  • 确认 Python 环境:Issue 中显示运行环境为 Python 3.13,确认是否与本地或 CI 环境一致。
  • 如使用 AWS ECS,检查任务定义中传递的启动命令与环境变量是否包含正确路径的配置文件。

解决步骤

  1. 打开 LiteLLM 的配置文件(如 config.yaml),定位到 general_settings 部分。
  2. 检查 alerting 字段的写法。若为 alerting:["email"],改为 alerting: ["email"](在冒号后添加一个空格)。
  3. 全局搜索配置文件中所有类似“冒号后直接跟值”的写法(如 key:value),统一修正为 key: value 格式。
  4. 重新构建 ECS 任务或重启 LiteLLM 服务,确认启动日志中不再出现 AttributeError

验证方法

在 ECS 中重新部署任务后,查看 CloudWatch 日志:如果启动日志中不再出现 AttributeError: 'str' object has no attribute 'get',且 LiteLLM 正常打印启动成功的标识(如监听端口、路由注册信息),说明问题已解决。也可以在本地先运行 litellm --config /path/to/config.yaml 快速验证配置文件是否可被正确解析。

参考来源

BerriAI/litellm #38190

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20279

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注