[英]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.