Какую ошибку я должен поднять, если размер списка не кратен некоторому значению?

1

Какую ошибку я должен повысить, если размер какого-либо списка не кратен некоторому значению?

Рассмотрим следующий фрагмент кода:

def func(x: []):
    if ( len(x) % 2) != 0:
        raise WhatError("?")
    # ...

Я рассмотрел TypeError, ValueError и IndexError но я не думаю, что какая-либо из них соответствовала моей проблеме. Есть ли ошибочный тип для этого типа проблем, или я должен просто укусить пулю и использовать один из них?

  • 1
    Вы можете вызвать пользовательскую ошибку , иначе ValueError будет действительным
  • 0
    Если в документации это явно указано (например, «если размер не делится на 2, тогда будет ValueError »), то это не большая проблема.
Показать ещё 3 комментария
Теги:

2 ответа

3
Лучший ответ

Количество элементов списка является частью его значения, поэтому среди 3, ValueError является наиболее подходящим. TypeError был бы уместен, если бы это был не список/итерабельность, в то время как IndexError как обычно используется при попытке получить доступ к элементу x[i] и список имеет для этого неправильный размер.

3

Из документации ValueError:

исключение ValueError

Поднимается, когда операция или функция получает аргумент, который имеет правильный тип, но недопустимое значение, и ситуация не описывается более точным исключением, таким как IndexError.

Это кажется уместным в вашем случае. Это также то, что обычно используется в библиотеках Python для недопустимых аргументов, например, в math модуле. Также помните, что вы можете указать более конкретную причину ошибки, например

raise ValueError("List must have even number of elements")

О других ваших альтернативах: TypeError кажется неуместным, поскольку тип правильный. IndexError возможно, был поднят дальше по строке, если длина не четная, но поскольку вы не передаете ничего, что работает как индекс самой функции, я бы тоже не использовал ее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню