尝试 Python 中的多个语句

Try for multiple statements in Python

我需要一些 help/advice 来了解执行此操作的最佳方法。我在 Python 中有一段代码,它基本上或多或少是同一行(function/method 应用于不同的变量)。现在,有时,取决于其他因素,其中一些变量可能不存在,导致包含其中任何一个的行抛出异常。

我的目标是 运行 代码块允许包含现有变量的行 运行 并跳过其他行。我有一百万个解决方法,但我想看看是否有一种“干净”的方法,比如对“整个”块使用 try/exception。

我的想法是做这样的事情,其中​​a1、a2、a3等是可能存在或不存在的变量:

try:
    functionx(a1)
    functionx(a2)
    functionx(a3)
    ...
except:

并且不知何故,要让 try/except 换行以跳过不存在的,但执行存在的。

有什么想法吗?

编辑:重点是看看我是否可以在代码块中遇到异常后尝试“继续”,而不是中断并转到异常。

基于此answer,只有在检查变量存在后才能调用函数,如下所示:

functionx(a1) if 'a1' in locals() else None
functionx(a2) if 'a2' in locals() else None
functionx(a3) if 'a3' in locals() else None

假设您的意思是某些变量可能是 None:只有 运行 您在变量上的函数不是 None:

for non_null_var in [v for v in [a1, a2, a3, ...] if v is not None]:
  functionx(non_null_var)

map & filter 版本:

map(functionx, filter(lambda x: x is not None, [a1, a2, a3, ...]))

如果你真的是说它们根本没有定义,那么,修改 Martin 的回答:

for non_null_var in [v for v in ['a1', 'a2', 'a3', '...'] if v is in locals() and locals()[v] is not None]:
      functionx(locals()[v])

也许 *args 或 **kwargs 之类的东西可以解决问题。

def apply_on(*args):
    for arg in args:
    try:
        functionx(arg)
    except:
        pass

然后您可以这样调用:

apply_on(1, 2, 3, 4)

如果“变量”的名称在某种程度上很重要,则使用 kwargs:

def apply_on(**kargs):
    for name, arg in args.items():
        try:
            functionx(arg)
        except:
            pass

通常假设变量存在与否并不明确。在这种情况下选择一些其他数据结构,例如列表或字典,具体取决于您的用例。