Что означает трейсбек, как поймать исключение и чем отличаются частые ошибки.
Как читать traceback
Traceback (most recent call last): File "main.py", line 4, in <module> print(total(199, '3')) File "main.py", line 2, in total return price + qtyTypeError: unsupported operand type(s) for +: 'int' and 'str'
Читай снизу вверх: последняя строка — тип ошибки и причина, строки выше — путь до места падения, твой код обычно в нижней из File-строк. Тип плюс текст ошибки — готовый запрос для поиска по этому справочнику.
Частые ошибки: что значат
199 + '3' # TypeError: mixing int and stritems[10] # IndexError: index out of rangestock['x'] # KeyError: no such keyprnit('hi') # NameError: name is not definedint('12a') # ValueError: bad value for int()
TypeError — смешал типы (чинится через int()/str()); IndexError и KeyError — обращение к тому, чего нет; NameError — опечатка в имени. Название ошибки говорит, куда смотреть, точную строку показывает traceback.
try/except: перехват ошибки
raw = 'abc'try: value = int(raw)except ValueError: value = 0print(value) # 0
Код в try выполняется до первой ошибки, except подхватывает её и идёт по запасному пути. Указывай конкретный тип: голый except прячет настоящие баги.
raise: выбросить ошибку
def set_price(price): if price < 0: raise ValueError('price must be >= 0') return priceset_price(-5) # ValueError: price must be >= 0
raise останавливает функцию и отдаёт ошибку наверх — вызывающий код решит, ловить её или падать. Плохие входные данные лучше отклонить сразу, чем вернуть «тихий» None.
Печатай подпись и значение на входе функции и перед return — сразу видно, где данные разошлись с ожиданием. Убери отладочные print перед сабмитом: лишний вывод ломает сравнение в тестах.
Мы используем cookies. Используем файлы cookie, включая Яндекс.Метрику, для работы сайта, аналитики и улучшения сервиса. Продолжая пользоваться сайтом, ты соглашаешься с нашей политикой конфиденциальности и политикой использования cookies.