mlj*_*jli 4 python python-click
如果有命令组并且每个子命令都可能引发异常,我如何在一个地方一起处理它们?
鉴于以下示例:
import click
@click.group()
def cli():
pass
@cli.command()
def foo():
pass
if __name__ == '__main__':
cli()
Run Code Online (Sandbox Code Playgroud)
双方cli并foo可能会提高。我知道,一个可能的解决方案是将try-except各地cli()的在if条款。但是当你分发一个包时这不起作用。在setup.py 中,您必须指定一个入口点(在本例中为cli)。该if条款将不会被执行。
您可以click.Group通过继承来创建自定义。自定义组可以通过将其作为cls参数传递给click.group()装饰器来使用。如果您覆盖该__call__方法,您可以插入一个异常处理程序,如:
class CatchAllExceptions(click.Group):
def __call__(self, *args, **kwargs):
try:
return self.main(*args, **kwargs)
except Exception as exc:
click.echo('We found %s' % exc)
Run Code Online (Sandbox Code Playgroud)
import click
@click.group(cls=CatchAllExceptions)
def cli():
pass
@cli.command()
def foo():
raise Exception('an exception!')
if __name__ == '__main__':
cli('foo'.split())
Run Code Online (Sandbox Code Playgroud)
We found an exception!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |