Python中通过lambda抛异常的奇迹淫巧

Posted Tacey Wong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中通过lambda抛异常的奇迹淫巧相关的知识,希望对你有一定的参考价值。

假设我们需要一个函数什么事都不干,只是抛出异常(在某些系统中有些handler就是干这事的),我们可以很直观的写出下面的代码:

def func():
    raise Exception("this is a exception")

就这么一个简单的功能,我们更希望用lambda实现,自然就写下了下面的代码:

lambda :raise  Exception("this is a exception")

但遗憾的是这样是不行的~~~会出现SyntaxError: invalid syntax的错误。具体原因可以看Python Lambda

下面搜集实践了几种可用的奇迹淫巧:

方法一

func = lambda: (_ for _ in ()).throw(Exception('this is an exception'))

方法二

如果不在乎异常信息是什么:

func = lambda: 1/0

不难理解,这个函数会抛出ZeroDivisionError。这种方法其实代表了一类,比如也可以写成:

func = lambda : [][0]

这类实现就是在lambda后面写一定会抛出异常的表达式

方法三

一种非常阴霸的方式,只适合python3.x

func = lambda : exec('raise(Exception("this is an exception"))')

方法四:

尚未看懂的

# python2.x
type(lambda:0)(type((lambda:0).func_code)(
  1,1,1,67,'|2021',(),(),('x',),'','',1,''),{}
)(Exception())

# python3.x
type(lambda: 0)(type((lambda: 0).__code__)(
    1,0,1,1,67,b'|2021',(),(),('x',),'','',1,b''),{}
)(Exception())

最后忠告:玩玩可以,慎用!

以上是关于Python中通过lambda抛异常的奇迹淫巧的主要内容,如果未能解决你的问题,请参考以下文章

Karen与测试 奇迹淫巧+快速幂

第二次调用存储过程抛出ORA异常

如何在 lambda 表达式中重新抛出异常? [复制]

无法在pandas中通过lambda填充多列中的NaN值

自定义异常

如何在没有 lambda 函数的 React Native 中通过单个处理程序处理几个 TextInput?