Python 3 - поднять заявление
В настоящее время я работаю над Learning Python Марка Лутца и Дэвида Ашера, и я натолкнулся на раздел кода, который продолжает вызывать ошибки. Я знаю, что эта книга была написана для Python 2, в отличие от Pyhton 3, который я использую. Мне было интересно, знает ли кто-нибудь решение моей проблемы, поскольку я искал повсюду, но я не смог найти решение.
.........................
MyBad = 'oops'
def stuff( ):
raise MyBad
try:
stuff( )
except MyBad:
print('got it')
2 ответа
В принципе, MyBad
не является исключением, и raise
Оператор может использоваться только с исключениями.
Делать MyBad
исключение, вы должны заставить его расширить подкласс Exception
, Например, будет работать следующее:
class MyBad(Exception):
pass
def stuff( ):
raise MyBad
try:
stuff( )
except MyBad:
print('got it')
Выход:
got it
Однако лучше вызывать экземпляр класса исключения, а не сам класс, поскольку он позволяет использовать параметры, обычно описывающие ошибку. Следующий пример иллюстрирует это:
class MyBad(Exception):
def __init__(self, message):
super().__init__()
self.message = message
def stuff(message):
raise MyBad(message)
try:
stuff("Your bad")
except MyBad as error:
print('got it (message: {})'.format(error.message))
Выход:
got it (Your bad)
Вы не можете вызвать пользовательское исключение, не создав класс (по крайней мере, пустой).
Вы можете добавить пользовательский текст по своему усмотрению, используя также функцию __init__ вместо pass:
class MyBad(Exception):
pass
# def __init__(self, txt):
# print(txt)
def stuff( ):
raise MyBad('test')
try:
stuff( )
except MyBad:
print('got it')
Если вы используете pass, у вас будет:
понял
Если вы используете __init__() в комментарии, у вас будет
проверить и получил это