1. 程式人生 > 程式設計 >Python使用lambda丟擲異常實現方法解析

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,67,'|\0\0\202\1\0',(),('x',),'',''),{}

)(Exception())

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。