簡體   English   中英

有沒有辦法用Python Click自動處理異常?

[英]Is there a way to handle exceptions automatically with Python Click?

Click的異常處理文檔提到框架會自動優雅地處理某些類型的異常,例如AbortEOFErrorKeyboardInterrupt

對於我正在編寫的應用程序,有很多要點可以從中生成異常。 終止應用程序是正確的步驟,但不打印堆棧跟蹤。 我總是可以手動執行此操作:

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM