【问题标题】:Inconsistent return value Pylint不一致的返回值Pylint
【发布时间】:2021-10-20 10:11:40
【问题描述】:

我已使用 pylint 检查我的代码,并收到以下建议。 '函数中的所有 return 语句都应该返回一个表达式,或者它们都不应该返回。 (不一致的返回语句)'。代码块如下。我正在传递一个值,需要返回它所属的值范围。如果我将返回值移到 if 之外,它将返回不正确的计数值。有什么建议吗?

def findRangeValue(ranges, number):

    count = -1
    n = 2
    for x in range(len(ranges)-n+1):
        count += 1
        batch = range[x:x + n]
        if batch[0] < number <= batch[1]:
            return count

【问题讨论】:

  • 两种解决方案: 1. 将 return 移到外面,但在里面做 break。 2.循环后返回或引发错误(在某些情况下循环通过但你还没有返回。
  • 解决方案 1 完美运行,谢谢。

标签: python pylint


【解决方案1】:
  • 您需要确认函数在最常见的情况下始终具有非空(不是None)返回值。
  • 当循环中的所有 if 语句都失败时,您的代码将返回 None,需要在循环外添加最终返回值。

示例代码:

def findRangeValue(ranges, number):
    count = -1
    n = 2
    for x in range(len(ranges)-n+1):
        count += 1
        batch = ranges[x:x + n]
        if batch[0] < number <= batch[1]:
            return count
    return -1

print(findRangeValue([1,3,5,7,9], 4))
print(findRangeValue([1,3,5,7,9], 10))

结果:

1
-1

【讨论】:

  • 当我调用函数时,我已经实现了一个 if 语句来检查返回的值是否不是 None 并且添加的任何值不超过范围[-1]
【解决方案2】:

您的函数以某种方式编写,即仅在满足条件时才返回值,即。

if batch[0] < number <= batch[1]:

假设您正在使用类似的功能

range_val = findRangeValue([1,2,3], 3)

如果满足条件,则返回值将分配给range_val。但如果条件不满足,则函数不返回任何内容,您的 range_val 变为 None

但您的代码希望它是一个数字,而不是None。因此,现在您需要检查返回值以避免错误 - 额外的代码行。

假设您从代码的各个部分调用此函数,每个地方都需要引入此检查 - 越来越多的代码。

为了避免这种情况,要遵循的标准是,函数总是返回所承诺的内容。如果它不能这样做,请引发异常,以便通知调用者而无需额外检查。

在您的特定场景中,您可以使用 break 语句并始终在外部返回一个计数(请注意,如果未满足 break,则该值可能不是您所期望的)或使用带有 break 的附加标志变量,并且如果未设置标志变量,则会引发错误。

【讨论】:

  • 当我调用该函数时,我实现了一个 if 语句来检查返回的值是否不是 None 并且添加的任何值不超过范围 [-1]。通过在该函数结束时引发异常而不是这样做会更好吗?
猜你喜欢
  • 2020-05-03
  • 1970-01-01
  • 2015-08-29
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2016-01-27
相关资源
最近更新 更多