在函数之间传递列表以维护错误状态是一种不好的做法吗?

问题描述 投票:0回答:1

举个例子:

def some_method():
    errors = []
    resp1 = func1(..., errors)
    resp2 = func2(..., errors)
    if errors:
        print(f"Overall errors encountered: {errors}")
    else:
        print(f"Output={resp1+resp2}")

def func1(..., errors):
    # Do some processing
    if success:
        return response
    else:
        errors.append("Error occurred in func2")
        return

def func1(..., errors):
    # Do some processing
    if success:
        return response
    else:
        errors.append("Error occurred in func2")
        return

我是否应该初始化一个局部变量并返回它,以便我们从被调用的函数 1 和 2 中获取一个元组。然后在

some_method
中我们扩展错误列表。

什么是更Pythonic的方式?通过列表是一种不好的做法吗?在这里它对我有利,因为对于每种方法,错误列表都会作为引用传递,因此原始列表会附加到每个调用的函数中。

python
1个回答
0
投票

明确地将可变对象传递给函数并让函数更改它并没有什么真正糟糕的。缺点是,如果出于任何原因函数分配给传递的对象而不是更改它,这些更改将丢失,因为您只是重新分配本地引用。

我想说,以这种方式传递错误列表并不是不好的做法,这并不是 pythonic。 AFAIK,标准库中没有方法的函数使用该模式,因此它可能会令其他用户感到困惑。不幸的是,除了从被调用者函数抛出自定义异常(包含错误消息)并让调用者处理它之外,我不知道有什么好方法。这种方式将更接近标准库函数的作用。

© www.soinside.com 2019 - 2024. All rights reserved.