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

Typer命令返回值是否影响用户使用?兼询与Click的行为兼容性

Typer命令返回值:对终端用户无影响,测试友好

结论先行:Typer完全继承了Click的返回值处理逻辑,给命令函数添加return语句不会影响终端用户的使用体验,同时能完美满足你用CliRunner做单元测试的需求。

具体细节:

  • 终端运行场景:当用户直接在终端执行你的CLI工具时,Typer默认以standalone_mode=True的方式启动,此时命令函数的返回值会被自动忽略——终端只会输出你通过typer.echo()等方式显式输出的内容,返回值不会被打印,也不会引发任何异常。
  • 单元测试场景:使用CliRunner.invoke()测试时,Typer内部会自动处理standalone_mode,此时命令函数的返回值会被存入测试结果对象的return_value属性中,你可以直接用它做断言验证。

代码示例:

修改前的命令函数:

import typer

app = typer.Typer()

@app.command()
def greet(name: str):
    msg = f"Hi, {name}!"
    typer.echo(msg)

修改后带返回值的版本(仅添加一行return):

import typer

app = typer.Typer()

@app.command()
def greet(name: str):
    msg = f"Hi, {name}!"
    typer.echo(msg)
    return msg  # 仅用于测试捕获
  • 终端运行效果:执行python your_cli.py greet Bob,终端只会输出Hi, Bob!,和修改前完全一致。
  • 测试代码使用:
from typer.testing import CliRunner

runner = CliRunner()
test_result = runner.invoke(app, ["greet", "Bob"])
assert test_result.return_value == "Hi, Bob!"
assert test_result.exit_code == 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:09