当前位置: 首页 > 面试题库 >

定义引发异常的lambda表达式

邵赞
2023-03-14
问题内容

我如何写一个等于的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看起来对错误处理不太友好...