Я прочитал официальное определение «рейза», но до сих пор не совсем понимаю, что оно означает.
Проще говоря, что такое «рейз»?
Пример использования поможет.
Я прочитал официальное определение «рейза», но до сих пор не совсем понимаю, что оно означает.
Проще говоря, что такое «рейз»?
Пример использования поможет.
У него 2 цели.
Он используется для создания ваших собственных ошибок.
if something: raise Exception('My error!')
Второй - повторно вызвать текущее исключение в обработчике исключений, чтобы его можно было обработать дальше по стеку вызовов.
try:
generate_exception()
except SomeException as e:
if not can_handle(e):
raise
handle_exception(e)
except SomeException as e:
- person P-Gn; 10.11.2016
as e
? Чем он отличается от except SomeException
?
- person alpha_989; 14.01.2018
Он используется для вывода ошибок.
if something:
raise Exception('My error!')
Некоторые примеры здесь
raise
без аргументов - это специальное использование синтаксиса Python. Это означает получить исключение и повторно возбудить его. При таком использовании его можно было бы назвать reraise
.
raise
Из Справочника по языку Python:
Если никаких выражений нет, raise повторно вызывает последнее исключение, которое было активным в текущей области.
Если raise
используется отдельно без аргументов, используется строго для ререйза. Если это сделано в ситуации, которая не является повторным вызовом другого исключения, отображается следующая ошибка: RuntimeError: No active exception to reraise
Помимо raise Exception("message")
и raise
Python 3 представил новую форму raise Exception("message") from e
. Это называется цепочкой исключений, она позволяет сохранить исходное исключение (основную причину) с его трассировкой.
Это очень похоже на внутренние исключения из C #.
Дополнительная информация: https://www.python.org/dev/peps/pep-3134/
Вы можете использовать его, чтобы вызывать ошибки как часть проверки ошибок:
if (a < b):
raise ValueError()
Или обработайте некоторые ошибки, а затем передайте их как часть обработки ошибок:
try:
f = open('file.txt', 'r')
except IOError:
# do some processing here
# and then pass the error on
raise
raise
вызывает исключение. В некоторых других языках вместо этого используется глагол «бросить».
Он предназначен для сигнализации об ошибке; он отмечает, что ситуация является исключительной для нормального потока.
Возникшие исключения могут быть снова перехвачены кодом «вверх по течению» (окружающий блок или функция, ранее находившаяся в стеке), чтобы обработать их, используя комбинацию try
, except
.
trace
в нижнем вызове, где возникает ошибка, или в самом верхнем вызове? или рекомендуется делать raise Exception("message") from e
, чтобы довести ошибку до верхнего уровня?
- person alper; 28.04.2020
except ...:
, трассировка будет включать весь стек, от точки, где ваша программа Python была запущена, до места, где возникло исключение. Так что на самом деле не имеет значения, где в стеке находится ваш обработчик. Если вам нужно повторно вызвать исключение после обработки, используйте raise
, больше ничего.
- person Martijn Pieters; 29.04.2020
raise Exception("message") from e
заменяет e
исключение новым исключением, но простой Exception
экземпляр не имеет смысла. Если e
был TypeError
, ValueError
или LibrarySpecificException
, вы больше не можете улавливать эти конкретные исключения, потому что вы заменили его на Exception
.
- person Martijn Pieters; 29.04.2020
throw
. - person voithos   schedule 19.12.2012raise
выходит из функции автоматически или нужноreturn
послеraise
? - person alisa   schedule 31.05.2018