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

为何调用Click框架的main()后脚本无法执行后续代码?

使用Click框架后脚本提前退出的原因?

使用Click框架的脚本代码如下:

#!/usr/bin/env python3
import click

@click.command()
@click.option('--desiredrange', '-r', default=1)

def main(desiredrange):
    print(desiredrange)
    print('abcd')

main()
print('!!!!')

运行后终端输出1和abcd,但不会输出!!!!,main()之后的任何代码都不会执行,脚本直接退出。

移除Click框架后的代码:

#!/usr/bin/env python3

def main():
    print(1)
    print('abcd')

main()
print('!!!!')

运行后终端正常输出1、abcd和!!!!,后续代码可正常执行。两种场景均无报错,请问这是什么原因?


原因解析

核心问题出在Click的@click.command()装饰器上:

  • 这个装饰器会把你的main()函数包装成Click的命令对象,当你直接调用main()时,它在执行完函数内部逻辑后,会自动调用sys.exit()终止整个Python进程,所以后续代码根本没机会运行。
  • 而普通函数调用只是执行函数体内的代码,执行完成后会回到调用位置,继续往下执行后续语句,自然能正常输出!!!!。

解决办法

如果想让Click脚本执行完main()后继续运行后续代码,可以用两种方式:

  • 调用main.main()代替直接调用main(),这会只执行函数逻辑,不会触发进程退出
  • 把后续要执行的代码放到main()函数内部,比如把print('!!!!')移到函数里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:36:54