Вашему решению будет предоставлена функция func
, которая не имеет параметров и результата. Однако во время её исполнения может произойти одна из ошибок: ValueError
, TypeError
или SystemError
.
Вызовите её, обработайте ошибку и выведите её название. Если ошибка не произойдёт, выведите сообщение “No Exceptions”.
Пример
Ввод
def func():
x = int('Hello, world!')
Вывод
ValueError
Ввод
def func():
x = '2' + 2
Вывод
TypeError
Решение
Простая задача на освоение конструкции try/except/else.
От вас требуется вызвать функцию func() и в случае, если возникнет одна из трех ошибок – перехватить ее и вывести соответствующее сообщение.
Посмотреть код
Решение
Python
try:
func()
except ValueError:
print('ValueError')
except TypeError:
print('TypeError')
except SystemError:
print('SystemError')
except Exception as e:
print('Unexpected error: {e}')
else:
print('No Exceptions')
Сергей, здравствуйте,
Что-то не работает Ваше решение, вот такая ошибка:
solution.py:2:5: F821 undefined name ‘func’
solution.py:9:1: F841 local variable ‘e’ is assigned to but never used
В другом месте нашел такое решение:
try:
func()
except Exception as error:
print(type(error).__name__)
else:
print(‘No Exceptions’)
Как я понимаю, оно более универсальное. Вы можете мне пояснить почему __name__. Просто name дает ошибку type object ‘ValueError’ has no attribute ‘name’.
Без __name__ получаем, например, <class ‘ValueError’>.
У функции type есть какие-то еще атрибуты, помимо __name__? У других – тоже?
Это что-то универсальное, или только для классов ошибок?
Спасибо.
Добрый день!
Мое решение вполне себе работает.
Ключевая разница между этими решениями в том, что решение, которое вы нашли вернет только имя для любой ошибки, которая может произойти. Мое решение вернет имена, только для перечисленных ошибок, и полную информацию об ошибке, включая стек вызовов для ошибок, не перечисленных в задании.
Что касается имен обрамленных двумя подчерками, то у большинства объектов в python есть такие служебные или специальные имена и методы. Их можно увидеть в отладчике или почитать о них в документации.