如果存在命令组且每个子命令都可能引发异常,我如何在一个地方一起处理它们?
鉴于以下示例:
import click
@click.group()
def cli():
pass
@cli.command()
def foo():
pass
if __name__ == '__main__':
cli()
cli
和foo
都可能会提升。我知道一种可能的解决方案是在try-except
子句中cli()
周围放置if
。但是,当您分发包时,这不起作用。在 setup.py 中,您必须指定一个入口点(在本例中为cli
)。 <{1}}子句不会被执行。
答案 0 :(得分:4)
您可以通过继承自定义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)
方法,则可以插入异常处理程序,如:
import click
@click.group(cls=CatchAllExceptions)
def cli():
pass
@cli.command()
def foo():
raise Exception('an exception!')
if __name__ == '__main__':
cli('foo'.split())
We found an exception!
if(isset($_POST['productNames']) & isset($_POST['productCode']) & isset($_POST['barcode']) & isset($_POST['starterAmount']) & isset($_POST['buyingFee']) & isset($_POST['sellingFee']) & isset($_POST['KDV']))