当前位置: 首页 > 面试题库 >

如何处理列表推导中的异常?

董永宁
2023-03-14
问题内容

我在Python中有一些列表理解,其中每次迭代都可能引发异常。

例如 ,如果我有:

eggs = (1,3,0,3,2)

[1/egg for egg in eggs]

我将ZeroDivisionError在第三个元素中得到一个例外。

如何处理此异常并继续执行列表理解?

我能想到的唯一方法是使用辅助函数

def spam(egg):
    try:
        return 1/egg
    except ZeroDivisionError:
        # handle division by zero error
        # leave empty for now
        pass

但这对我来说有点麻烦。

有没有更好的方法在Python中执行此操作?

注意: 这是我做的一个简单示例(请参阅上面的“ 例如
”),因为我的实际示例需要一些上下文。我对避免除以零错误不感兴趣,但对处理列表理解中的异常不感兴趣。


问题答案:

Python中没有内置表达式可让您忽略异常(或在发生异常的情况下返回替代值&c),因此从字面上来讲,“处理列表推导中的异常”是不可能的,因为列表推导是一个表达式包含其他表达式,仅此而已(即,
没有 语句,只有语句可以捕获/忽略/处理异常)。

函数调用是表达式,函数主体可以包含所需的所有语句,因此,如您所注意到的,将易于发生异常的子表达式的评估委托给函数是一种可行的解决方法(其他可行的话,可以检查可能引发异常的值,如其他答案中所建议)。

对“如何处理列表理解中的异常”这一问题的正确回答都表达了所有这些事实的一部分:1)从字面上,即从词法上讲,在理解本身中,你不能做到;2)实际上,在可行的情况下,您将作业委托给一个函数或检查容易出错的值。您一再声称这不是一个答案是没有根据的。



 类似资料:
  • 我已经尝试将JSON响应添加到Realm数据库中。我通过GSON处理响应,然后尝试转换为realm。我已经为我的响应模型类扩展了RealmObject。我还使用RealmString类通过RealmList处理列表。但当我尝试将GSON应用到领域对象时,我会出错。我正在寻找一个这样的例子,如果有人有一个。感谢所有支持。下面是我的JSON回复。

  • 问题 你有一个对象数组,想将它们映射到另一个数组,类似于 Python 的列表推导。 解决方案 使用列表推导,但不要忘记还有 [mapping-arrays]( http://coffeescript-cookbook.github.io/chapters/arrays/mapping-arrays) 。 electric_mayhem = [ { name: "Doctor Teeth", in

  • 我有metohod myservice#create,它抛出CustomException。我在可选#map中调用此方法,如下所示: 当我用引起异常的参数调用这个方法时,就会捕获CustomException,但结果是操作成功,状态为200。如何在lambda中处理此异常并返回异常消息?

  • 问题内容: 我的问题是关于Python List Comprehension的 可读性。当我遇到具有复杂/嵌套列表理解的代码时,我发现我不得不重新阅读它们几次才能理解其意图。 有一种直观的方法来朗读列表理解吗?似乎我应该从中间开始“读取”,然后读取 if 条件(如果有),最后读取 表达式 。 这是我如何大声阅读下面的代码行,以便理解它: “对于列表x中的每个元素,以及列表y中的每个元素, 如果两个

  • 问题内容: 是否可以使用列表理解来模拟类似sum()的东西? 例如-我需要计算列表中所有元素的乘积: 相同的代码: 问题答案: 没有; 列表理解会生成一个与其输入一样长的列表。您将需要Python的其他功能工具之一(在本例中为特定情况)将序列折叠为单个值。

  • 我们正在将Oracle Weblogic server 8.1升级到Weblogic server 12c,并将java 1.4升级到1.8 我的任务是确保应用程序功能保持不变。一些应用程序自2007年以来就没有碰过。 前面的代码是: 搜索“weblogic.jar”(在“\Oracle\Middleware\Oracle\u Home\wlserver\server\lib”中找到),我看到它没