如何在不使用额外函数的列表推导式中抛出异常?
一行代码实现列表元素类型校验并抛异常
你之前的代码无法运行,核心原因是列表推导式的表达式位置只能容纳有返回值的表达式,而raise是仅执行逻辑的语句,不能直接放在这里。
要实现不依赖额外自定义函数的一行代码方案,可以利用all()函数结合生成器表达式,搭配exec()来执行raise语句:
all(isinstance(x, int) or exec("raise Exception('Incorrect Data Type Present')") for x in my_list)
原理说明:
all()会遍历生成器中的每个元素,只要有一个元素让表达式返回False,就会停止遍历;- 当元素不是整数时,
isinstance(x, int)为False,会执行exec()里的raise语句,直接抛出异常; - 当所有元素都是整数时,
all()返回True,不会触发异常。
也可以用any()检测是否存在非整数元素,存在则抛异常,写法更直观:
any(not isinstance(x, int) and exec("raise Exception('Incorrect Data Type Present')") for x in my_list)
这两种写法都不需要额外定义函数,完全在一行代码内完成需求。
内容的提问来源于stack exchange,提问作者Dremloogic
相关产品推荐
相关产品推荐

