Member 14141186 Ответов: 1

Как избежать nameerror в классе Python 3.7?


Я пытаюсь написать программу, в которой предложение "except" будет выполняться, когда параметры неверны, но я получаю NameError, когда даю недопустимый параметр. Я хотел, чтобы функция печати запускалась только тогда, когда параметры верны, но она работает, даже если параметры неверны, и поэтому я получаю ошибку.
Может ли кто-нибудь подсказать, как я могу получить вывод без получения ошибки?

Мой код таков:

class Hotel:
    def __init__(self,room,catagory):
        if type(room) != int:
            raise TypeError()
        if type(catagory) != str:
            raise TypeError()
        self.room = room
        self.catagory = catagory
        self.catagories = {"A":"Elite","B":"Economy","C":"Regular"}
        self.rooms = ["0","1","2","3","4","5"]


    def getRoom(self):
        return self.room

    def getCatagory(self):

        return self.catagories.get(self.catagory)
    def __str__(self):
        return "%s and %s"%(self.rooms[self.room],self.catagories.get(self.catagory))

try:
    room1 = Hotel(a,"A")

except: 

    print("there's an error")


print (room1)


Что я уже пробовал:

Я пытался сделать отступ в строке печати внутри и снаружи условия except, но ни один из способов не сработал.

Richard MacCutchan

Ваш гостиничный класс ожидает, что первый параметр будет целочисленным значением. Переменная a не определена, поэтому она терпит неудачу.

1 Ответов

Рейтинг:
1

Bryian Tan

если вы посмотрите на предыдущий пост:

Как я могу поймать сообщение об ошибке, если пользователь дает неправильный ввод (без использования isinstance)?[^], он объясняет, как отобразить подробное сообщение об ошибке с помощью демо-версии.

следующая строка выдаст ошибку "NameError: имя 'a' не определено в строке xx"

room1 = Hotel(a,"A")


следующая строка выдаст ошибку "TypeError: on line xx"
room1 = Hotel('a',"A")


Как вы можете видеть, первая строка жалуется на a не является допустимой переменной и не вызывает Hotel класс

Вторая линия, вызовите Hotel ошибка типа класса и броска.

8. ошибки и исключения — документация Python 3.7.2[^]