Какую ошибку я должен повысить, если размер какого-либо списка не кратен некоторому значению?
Рассмотрим следующий фрагмент кода:
def func(x: []):
if ( len(x) % 2) != 0:
raise WhatError("?")
# ...
Я рассмотрел TypeError
, ValueError
и IndexError
но я не думаю, что какая-либо из них соответствовала моей проблеме. Есть ли ошибочный тип для этого типа проблем, или я должен просто укусить пулю и использовать один из них?
Количество элементов списка является частью его значения, поэтому среди 3, ValueError
является наиболее подходящим. TypeError
был бы уместен, если бы это был не список/итерабельность, в то время как IndexError
как обычно используется при попытке получить доступ к элементу x[i]
и список имеет для этого неправильный размер.
Из документации ValueError
:
исключение
ValueError
Поднимается, когда операция или функция получает аргумент, который имеет правильный тип, но недопустимое значение, и ситуация не описывается более точным исключением, таким как IndexError.
Это кажется уместным в вашем случае. Это также то, что обычно используется в библиотеках Python для недопустимых аргументов, например, в math
модуле. Также помните, что вы можете указать более конкретную причину ошибки, например
raise ValueError("List must have even number of elements")
О других ваших альтернативах: TypeError
кажется неуместным, поскольку тип правильный. IndexError
возможно, был поднят дальше по строке, если длина не четная, но поскольку вы не передаете ничего, что работает как индекс самой функции, я бы тоже не использовал ее.
ValueError
будет действительнымValueError
»), то это не большая проблема.