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

python中的嵌套try语句?

朱乐逸
2023-03-14
问题内容

有没有更好的方法来执行以下操作:

try:
    a.method1()
except AttributeError:
    try:
        a.method2()
    except AttributeError:
        try:
            a.method3()
        except AttributeError:
            raise

看起来很讨厌,我不想这样做:

if hasattr(a, 'method1'):
    a.method1()
else if hasattr(a, 'method2'):
    a.method2()
else if hasattr(a, 'method3'):
    a.method3()
else:
    raise AttributeError

保持最高效率。


问题答案:

也许您可以尝试这样的事情:

def call_attrs(obj, attrs_list, *args):
    for attr in attrs_list:
        if hasattr(obj, attr):
            bound_method = getattr(obj, attr)
            return bound_method(*args)

    raise AttributeError

您可以这样称呼它:

call_attrs(a, ['method1', 'method2', 'method3'])

这将尝试按它们在列表中的顺序调用这些方法。如果您想传递任何参数,可以像下面这样在列表之后传递它们:

call_attrs(a, ['method1', 'method2', 'method3'], arg1, arg2)


 类似资料:
  • 前面章节中,详细介绍了 3 种形式的条件语句,即 if、if else 和 if elif else,这 3 种条件语句之间可以相互嵌套。 例如,在最简单的 if 语句中嵌套 if else 语句,形式如下: if 表达式 1:     if 表示式 2:         代码块 1     else:         代码块 2 再比如,在 if else 语句中嵌套 if else 语句,形式

  • 问题内容: 我有这样的说法 而且我非常怀疑是否在每次不满足第一个条件()时都执行else块,这可能吗?我在缩进方面做错了吗? 问题答案: 该子句对应于您期望的相同缩进级别。 您看到的问题可能是由于您混合了制表符和空格,所以缩进的表观级别与您的解释器看到的级别不同。 将所有选项卡更改为空格,然后检查问题是否消失。

  • 本文向大家介绍django中嵌套的try-except实例,包括了django中嵌套的try-except实例的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧! 感觉上面这段代码,应用的技术点蛮多的,作个记录。 包括其node port的管理思想,提取技巧。 orm的列表扁平化,列表交集,批量删除 补充知识:Django 在异常捕获中进行数据库保存,保存后将异常再抛

  • 问题内容: python中有没有办法将try / except变成一行? 就像是… 哪里是声明的变量,而不是…所以会引发错误并变成… 问题答案: 在Python中无法将/块压缩到一行上。 另外,不知道变量是否像在其他动态语言中一样,在Python中是否存在也是一件坏事。比较安全的方法(和流行的样式)是将所有变量设置为某种值。如果他们可能就不会置,将其设置为第一(或或或如果它是更适用的东西。) 如果

  • 本文向大家介绍讲解Python中if语句的嵌套用法,包括了讲解Python中if语句的嵌套用法的使用技巧和注意事项,需要的朋友参考一下  可能有这样一种情况,当你想检查其他条件后一个条件解析为真。在这种情况下,可以使用嵌套的if结构。 在嵌套的 if 语句结构,可以在一个 if... elif... else 结构里面可有另外一个 if... elif... else 结构。 语法: 嵌套 if.

  • 问题内容: 我经常发现自己正在这样做: 在Python中有更简洁的方法吗?我在想一些类似的东西 问题答案: 您可以使用itertools.product: