1

Cliquez sur exception handling documentation mentionne que certains types d'exceptions telles que Abort, EOFError et KeyboardInterrupt sont automatiquement gérés gracieusement par le cadre.Existe-t-il un moyen de gérer automatiquement les exceptions avec Python Click?

Pour l'application que j'écris, il y a beaucoup de points à partir desquels des exceptions peuvent être générées. Terminer l'application est la bonne étape, mais l'impression de la trace de la pile ne l'est pas. Je pourrais toujours manuellement faire ceci:

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

Cependant, y a-t-il un moyen d'avoir le clic manipulent toutes les exceptions automatiquement?

Répondre

1

Dans notre CLI, toutes les commandes sont regroupées sous un seul groupe de commandes. Cela nous a permis d'implémenter un comportement qui devait être exécuté pour chaque commande. Une partie de cela est la gestion des exceptions.

Notre point d'entrée ressemble à quelque chose comme ceci:

@click.group() 
@click.pass_context 
def entry_point(ctx): 
     ctx.obj = {"example": "This could be the configuration"} 

Nous l'utilisons pour exécuter du code global, par exemple configurez le context, mais vous pouvez également définir une méthode vide qui ne fait rien. D'autres commandes peuvent être ajoutées à ce groupe de commandes en utilisant le décorateur @entry_point.command() ou entry_point.add_command(cmd).

Pour la gestion des exceptions, nous terminerons la entry_point dans une autre méthode qui gère les exceptions:

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

Dans setup.py, il faut configurer le point d'entrée pour la CLI et de pointer vers l'emballage:

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

Les commandes de l'interface de ligne de commande peuvent être exécutées via son groupe de commandes: par ex. cli command.

Il pourrait y avoir des solutions plus élégantes, mais c'est ainsi que nous l'avons résolu. Alors qu'il introduit un groupe de commandes comme élément de plus haut niveau dans votre CLI, il nous permet de gérer toutes les exceptions dans un seul endroit sans avoir à dupliquer le traitement des erreurs dans chaque commande.