我如何写一个等于的lambda表达式:
def x():
raise Exception()
不允许以下内容:
y = lambda : raise Exception()
皮肤化Python的方法不止一种:
y = lambda: (_ for _ in ()).throw(Exception('foobar'))
Lambda接受语句。既然raise ex
是一条语句,您可以编写一个通用的提升器:
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
。
问题内容: 您能解释一下为什么必须从lambda表达式中捕获已检查的异常吗?换句话说,为什么以下代码无法编译… 但是这个会吗? 似乎被调用方现在必须处理引发的所有已检查异常,而不是调用方。 问题答案: 问题不是lambda表达式,而是它正在实现的接口。请记住,lambda表达式基本上只是实现给定接口的匿名类的简写。 在这种情况下,请输入: 注意,没有声明抛出任何东西。这意味着它的任何实现都不能抛出
问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以
我用Spring5反应式编写了一个自定义异常 我把这个叫做服务: 但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息? AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗? 这是我的控制器: 谢谢
问题内容: 我升级到Java 8,并尝试用新的lamdba表达式替换Map中的简单迭代。循环搜索空值,如果找到一个,则引发异常。旧的Java 7代码如下所示: 我将其转换为Java 8的尝试如下所示: 谁能解释为什么此处不允许该声明以及如何更正该声明? Eclipse的快速修复建议对我来说并不正确……它只是在语句周围加上了一个块: 问题答案: 不允许抛出检查异常,因为接口中的方法未在其子句中声明任
我怎样才能用Java8做到这一点呢?
给定Java8代码 java中的Lambdas看起来对错误处理不太友好...