在我們的CLI中,所有命令都歸入一個命令組。這使我們能夠執行一些需要爲每個命令執行的行爲。其中一部分是異常處理。
我們的切入點看起來是這樣的:
@click.group()
@click.pass_context
def entry_point(ctx):
ctx.obj = {"example": "This could be the configuration"}
我們用它來運行的全局代碼,例如配置context
,但您也可以定義一個不執行任何操作的空方法。其他命令可以通過使用@entry_point.command()
裝飾器或entry_point.add_command(cmd)
添加到此命令組。
對於異常處理,我們在處理例外的另一種方法包裹entry_point
:
def safe_entry_point():
try:
entry_point()
except Exception as e:
click.echo(e)
在setup.py
,我們配置的入口點的CLI並將其指向包裝:
entry_points={
'console_scripts': [
'cli = my.package:safe_entry_point'
]
}
CLI的命令可以通過其命令組執行:例如cli command
。
可能有更優雅的解決方案,但這是我們如何解決它。雖然它引入了一個命令組作爲CLI中的最高級別元素,但它允許我們在單個位置處理所有異常,而無需在每個命令中重複我們的錯誤處理。