Тестирование вызова с использованием конструкции try-except
На этом этапе вы узнаете, как использовать блоки try-except
для обработки потенциальных ошибок при вызове объектов в Python. Это особенно полезно, когда вы не уверены, является ли объект вызываемым или может ли вызов объекта вызвать исключение.
Начнем с примера, в котором мы пытаемся вызвать объект, который может быть не вызываемым:
def my_function():
return "Hello from my_function!"
x = 10
objects_to_test = [my_function, x]
for obj in objects_to_test:
try:
result = obj()
print(f"Object is callable, result: {result}")
except TypeError as e:
print(f"Object is not callable: {e}")
Добавьте этот код в файл callable_example.py
, заменив предыдущее содержимое.
Теперь выполните скрипт, используя следующую команду в терминале:
python callable_example.py
Вы должны увидеть следующий вывод:
Object is callable, result: Hello from my_function!
Object is not callable: 'int' object is not callable
В этом примере мы проходим по списку объектов, пытаясь вызвать каждый из них. Блок try
пытается вызвать объект. Если объект вызываем и вызов прошел успешно, выводится результат. Если объект не вызываем, возникает исключение TypeError
, и блок except
ловит это исключение и выводит соответствующее сообщение.
Теперь рассмотрим случай, когда объект вызываем, но вызов его может вызвать другое исключение:
def my_function(a, b):
return a / b
try:
result = my_function(10, 0)
print(f"Result: {result}")
except ZeroDivisionError as e:
print(f"Error: {e}")
except TypeError as e:
print(f"Error: {e}")
Добавьте этот код в файл callable_example.py
, заменив предыдущее содержимое.
Выполните скрипт еще раз:
python callable_example.py
Вы должны увидеть следующий вывод:
Error: division by zero
В этом случае функция my_function
вызываема, но вызов ее с b = 0
вызывает исключение ZeroDivisionError
. Блок try-except
ловит это конкретное исключение и обрабатывает его корректно.
Использование блоков try-except
позволяет писать более надежный и устойчивый код, предвидя и обрабатывая потенциальные ошибки, которые могут возникнуть при вызове объектов.