【问题标题】:python multiple assignment with possible exceptionspython多重赋值,可能有异常
【发布时间】:2021-10-22 08:34:10
【问题描述】:

我正在使用 python 3.x 我有很多变量和很多函数。 我必须将这些变量分配给函数的值,例如:

x1 = f1()
x2 = f2()
......

这些函数可能会抛出异常,在这种情况下我需要返回 None。 我想写一个函数来完成这个任务。

assign(x1,f1).

任何想法如何实现它。

【问题讨论】:

  • 你不能为你的函数使用装饰器,将你的调用封装在 try / except 中,并在出现问题时返回 None 吗?

标签: python exception


【解决方案1】:

不,从函数中分配给变量显然是不可能的,但是无论如何都没有必要将 assigning 封装到该函数中:

def safely_call(f, *args, **kwargs):
    try:
        return f(*args, **kwargs)
    except Exception:
        logging.exception('Call to %s (%s, %s) failed', f, args, kwargs)
        return None

x1 = safely_call(f1)
x2 = safely_call(f2)

【讨论】:

  • 我没有想到函数参数的*args,**kwargs添加,做得很好!我认为这是一个很好的答案。
【解决方案2】:

你可以使用装饰器。装饰器捕获异常并返回 None。

def exception_handler(func):
    def inner_function(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except:
            return None
    return inner_function

@exception_handler
def myFunc(length):
    pass

【讨论】:

    【解决方案3】:

    这可能是你想要的:

    def f1():
        return 1/0
    
    def f2():
        return 5
    
    def assign(fn):
        try:
            result = fn()
        except:
            result = None
        return result
        
    x1 = assign(f1)
    x2 = assign(f2)
    print(x1," ",x2)
    

    输出:

    None   5
    

    也许可以进一步缩短和优化,但这个想法应该可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-30
      • 2021-08-11
      • 2023-03-04
      • 2018-08-13
      • 2018-07-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多