Python使用lambda抛出异常实现方法解析
假设我们需要一个函数什么事都不干,只是抛出异常(在某些系统中有些handler就是干这事的),我们可以很直观的写出下面的代码:
deffunc():
raiseException("thisisaexception")
就这么一个简单的功能,我们更希望用lambda实现,自然就写下了下面的代码:
lambda:raiseException("thisisaexception")
但遗憾的是这样是不行的~~~会出现SyntaxError:invalidsyntax的错误。具体原因可以看PythonLambda
下面搜集实践了几种可用的奇技淫巧:
方法一
func=lambda:(_for_in()).throw(Exception('thisisanexception'))
方法二
如果不在乎异常信息是什么:
func=lambda:1/0
不难理解,这个函数会抛出ZeroDivisionError。这种方法其实代表了一类,比如也可以写成:
func=lambda:[][0]
这类实现就是在lambda后面写一定会抛出异常的表达式
方法三
一种非常阴霸的方式,只适合python3.x
func=lambda:exec('raise(Exception("thisisanexception"))')
方法四:
尚未看懂的
#python2.x
type(lambda:0)(type((lambda:0).func_code)(
1,1,1,67,'|\0\0\202\1\0',(),(),('x',),'','',1,''),{}
)(Exception())
或
#python3.x
type(lambda:0)(type((lambda:0).__code__)(
1,0,1,1,67,b'|\0\202\1\0',(),(),('x',),'','',1,b''),{}
)(Exception())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。