gpt4 book ai didi

python - 定义引发异常的 lambda 表达式

转载 作者:IT老高 更新时间:2023-10-28 21:06:15 25 4
gpt4 key购买 nike

我如何编写一个等效于的 lambda 表达式:

def x():
raise Exception()

以下是不允许的:

y = lambda : raise Exception()

最佳答案

给 Python 换肤的方法不止一种:

y = lambda: (_ for _ in ()).throw(Exception('foobar'))

Lambda 接受语句。由于 raise ex 是一个语句,你可以写一个通用的 raiser:

def raise_(ex):
raise ex

y = lambda: raise_(Exception('foobar'))

但是,如果您的目标是避免 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

关于python - 定义引发异常的 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com