![](/img/trans.png)
[英]AWS Python Lambda: how to raise Exception for step function
[英]Can I write a lambda function to raise an exception?
假設我有以下python列表:
my_list = [1, 2,'X', 'Y', 0]
假設我要將此列表的值復制到新列表中,如下所示:
None
”復制到新列表中 我可以使用如下所示的lambda函數來執行此操作嗎? 如果是這樣,怎么辦?
new_list = map(lambda(x): something-here-but-what??, my_list)
為什么不只是編寫一個您想要的函數並將其放入lambda中呢? 我看不出有理由為一條不止一排的東西制作復雜的單線紙。
my_list = [1, 2,'X', 'Y', 0]
def replace(x):
if x == 'X':
return None
elif type(x) == int and x <= 9 and x >= 0:
return x
else:
raise ValueError('Bad value')
new_list = map(lambda(x): replace(x), my_list[:-2]) # Returns [1, 2, None]
new_list = map(lambda(x): replace(x), my_list) # Raises exception
要備份布倫登(相當正確)的答案...
實際上,您可以使用Python三元表達式來做一些奇怪的事情……但是結果是難以忍受的。 考慮部分解決方案:
>>> new_list = map(lambda x: x if isinstance(x, int) and (0 <= x and x <= 9) else ValueError('Bad things happened'), [1, 2, 3, "blah"])
>>> list(new_list)
[1, 2, 3, ValueError('Bad things happened',)]
這不僅令人恐懼,而且可能會使大多數Pythonista迷惑(不僅是使用不尋常的構造,還為什么要使用這種構造?),我還不知道該如何在不重新定義的情況下實際引發異常呢? list()
工作方式。 ( raise
當獨自站在只有作品。)
因此,現在我們有了一個令人困惑的lambda,該lambda有條件地允許成員進入新的地圖構造或包含ValueError
對象。 育。
更好地將整個想法抽象成一個功能,該功能以一種非常簡單的方式准確地實現了您想要的功能,並且讓“美麗的代碼部分”成為人們將來通常需要閱讀的,類似於:
new_list = valid_list_to_map(your_list)
使用條件表達式。
a = list(map(lambda n: n if n in (0,1,2,3,4,5,6,7,8,9) else (None if n == 'X' else 1/0), my_list))
可以引發的其他異常:
在條件表達式中,將1/0
替換為
{}[n] #KeyError
x #NameError
(_ for _ in ()).throw(Exception('Foo'))) #any kind of exception you want
int('x') #ValueError
要引發異常,您必須使用“ try”和“ except”語句,並且lambda表達式中不允許使用語句。 在Lambda表達式中,只能包含表達式,因此不能在lambda函數中引發異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.