Используйте ключевое слово raise
, чтобы вызвать исключение, а не вернуть его. raise
используется для генерации нового исключения:
>>> raise TypeError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError
В этом примере я поднял TypeError
, напрямую используя класс исключения. Вы также можете создавать экземпляры ошибки следующим образом:
>>> t=TypeError()
>>> raise t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError
Делая так, вы можете установить различные свойства объекта перед использованием raise
. К опубликованной проблеме относится следующее требование:
При выдаче ошибки TypeEr сообщение должно быть n недействительным, где вы заменяете n на фактическое значение, переданное функции.
Это пример ситуации, когда необходимо создать экземпляр ошибки и задать для него свойство сообщения перед использованием raise
. Это все еще можно сделать в одной строке:
>>> raise TypeError("foo")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo
Для перехвата исключений, используйте блок try-except
вместо блока if
:
x = 'hello, world!'
try:
y = x / 2
except TypeError as e:
e.args = (*e.args, str(x) + " is not valid")
raise
Это вызовет ошибку:
TypeError: ("unsupported operand type(s) for /: 'str' and 'int'", 'hello, world! is not valid')
обратите внимание, что вы можете проверить тип данных переменной, используя type()
:
>>> x = 5
>>> type(x)
<class 'int'>
>>> if type(x) == int:
... print("it's an int")
...
it's an int
Кроме того, пример кода может быть упрощенным до:
return [v for _ in range(n)]