簡體   English   中英

不一致的返回值 Pylint

[英]Inconsistent return value Pylint

我使用 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
  • 您需要確認該函數在最常見的情況下始終具有非空(不是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 batch[0] < number <= batch[1]:

假設您正在使用該功能,例如

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

如果滿足條件,則返回值將分配給range_val 但是如果不滿足條件,則該函數不返回任何內容並且您的range_val變為None

但是您的代碼期望它是一個數字而不是None 因此,現在您需要檢查返回值以避免錯誤 - 額外的一行代碼。

假設您從代碼的各個部分調用這個函數,每個地方都需要引入這個檢查——越來越多的代碼。

為了避免這種情況,要遵循的標准是,函數始終返回承諾的內容。 如果它不能這樣做,則引發一個異常,以便調用者在沒有額外檢查的情況下得到通知。

在您的特定場景中,您可以使用break語句並始終在外部返回一個計數(請注意,如果不滿足 break,則該值可能不是您所期望的)或者使用帶有 break 的附加標志變量,如果標志變量未設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM