[英]Is there a way to handle exceptions automatically with Python Click?
Click的異常處理文檔提到框架會自動優雅地處理某些類型的異常,例如Abort
, EOFError
和KeyboardInterrupt
。
對於我正在編寫的應用程序,有很多要點可以從中生成異常。 終止應用程序是正確的步驟,但不打印堆棧跟蹤。 我總是可以手動執行此操作:
@cli.command()
def somecommand:
try:
# ...
except Exception as e:
click.echo(e)
但是,有沒有辦法讓Click自動處理所有異常?
在我們的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中的最高級元素,但它允許我們在一個地方處理所有異常,而無需在每個命令中復制我們的錯誤處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.