import logging
from time import perf_counter
from functools import wraps
logging.basicConfig(
format="%(asctime)s - %(levelname)s - %(message)s",
level=logging.DEBUG,
datefmt="%Y-%m-%d %H:%M:%S"
)
def timer(func):
@wraps(func)
def _timer(*args, **kwargs):
logging.info(f"Executing {func.__name__}.")
start = perf_counter()
result = func(*args, **kwargs)
end = perf_counter()
logging.info(f"Executed {func.__name__} in {start-end: .6f} seconds.")
return result
return _timer
@timer
def elementwise_unsafe_divide(array, divisor):
if not all((divisor, isinstance(divisor, int))):
logging.critical("Invalid divisor provided:", divisor)
exit(1)
result = []
invalid_operations = 0
for elem in array:
try:
result.append(elem / divisor)
except (ZeroDivisionError, TypeError):
invalid_operations += 1
result.append(elem)
continue
logging.warning(f"Encountered {invalid_operations} invalid operations")
return result
def main():
arr = [1, 2, 4, "hi", "bye"]
print("Array:", arr)
result = elementwise_unsafe_divide(arr, 4)
print("arr / 4(elementwise):", result)
if __name__ == "__main__":
main()