如何编写等效于以下内容的 lambda 表达式:
def x(): raise Exception()
以下是不允许的:
y = lambda : raise Exception()
给 Python 换肤的方法不止一种:
y = lambda: (_ for _ in ()).throw(Exception('foobar'))
Lambda 接受语句。因为raise ex是一个声明,你可以写一个通用的 raiser:
raise ex
def raise_(ex): raise ex y = lambda: raise_(Exception('foobar'))
但是,如果您的目标是避免 a def,这显然不会削减它。但是,它确实允许您有条件地引发异常,例如:
def
y = lambda x: 2*x if x < 10 else raise_(Exception('foobar'))
或者,您可以在不定义命名函数的情况下引发异常。您所需要的只是一个强壮的胃(以及给定代码的 2.x):
type(lambda:0)(type((lambda:0).func_code)( 1,1,1,67,'|\0\0\202\1\0',(),(),('x',),'','',1,''),{} )(Exception())
还有一个python3 强胃 解决方案:
type(lambda: 0)(type((lambda: 0).__code__)( 1,0,1,1,67,b'|\0\202\1\0',(),(),('x',),'','',1,b''),{} )(Exception())
感谢@WarrenSpencer 指出一个非常简单的答案,如果您不在乎引发哪个异常:y = lambda: 1/0。
y = lambda: 1/0