1

Clickのexception handling documentationは、AbortEOFError、およびKeyboardInterruptなどの特定の種類の例外は、フレームワークによって自動的に正常に処理されると述べています。Pythonで自動的に例外を処理する方法はありますか?

私が書いているアプリケーションでは、例外が発生する可能性のある点がたくさんあります。アプリケーションの終了は正しいステップですが、スタックトレースの印刷は行いません。

@cli.command() 
def somecommand: 
    try: 
    # ... 
    except Exception as e: 
    click.echo(e) 

ただし、Clickですべての例外を自動的に処理する方法はありますか?

答えて

1

CLIでは、すべてのコマンドは1つのコマンドグループの下にグループ化されています。これにより、各コマンドに対して実行する必要のある動作を実装することができました。それの1つは例外処理です。

@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をラップ:setup.py

def safe_entry_point(): 
     try: 
      entry_point() 
     except Exception as e: 
      click.echo(e) 

、私たちは、CLIのエントリポイントを設定し、ラッパーにそれを指す:

entry_points={ 
    'console_scripts': [ 
     'cli = my.package:safe_entry_point' 
    ] 
} 

CLIのコマンドは、コマンドグループから実行できます。 cli command

もっと洗練されたソリューションがあるかもしれませんが、これが私たちが解決した方法です。コマンド・グループはCLIの最上位要素として導入されていますが、コマンドごとにエラー処理を複製する必要はなく、すべての例外を1か所で処理できます。

関連する問題