Вы можете использовать python декоратор для изготовления этого очистителя. Декоратор принимает функцию в качестве аргумента, выполняет некоторые модификации (например, запускает функцию, изменяет вывод и т. Д. c.) И выплевывает другую функцию.
Следующий декоратор
- принимает вашу функцию
decode
в качестве входа - проверяет, существует ли соответствующий модуль или нет
- , если модуль существует, затем запускает
decode
функцию - , если модуль не существует, он показывает полезное сообщение и ничего не делает
from functools import wraps
def catch_exception(func):
@wraps(func)
def wrapper(*args, **kwargs):
try:
from av.frame import Frame
return func(*args, **kwargs)
except ModuleNotFoundError:
print("Module not found, not applying the function.")
return wrapper
Вы можете использовать этот декоратор следующим образом:
@catch_exception
def decode(encoded_frame) -> List[Frame]:
pass
Если соответствующий модуль существует, он запустит функцию, иначе он просто распечатает полезное сообщение об ошибке и ничего не сделает.
Вы даже можете изменить этот декоратор таким образом, чтобы он использовал имя импортирующего модуля в качестве аргумента декоратора и динамически изменял его.