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__() в комментарии, у вас будет

проверить и получил это

Другие вопросы по тегам