面试题答案
一键面试import logging
def check_int_params(func):
def wrapper(*args, **kwargs):
for arg in args:
if not isinstance(arg, int):
raise ValueError("参数必须为整数类型")
for value in kwargs.values():
if not isinstance(value, int):
raise ValueError("参数必须为整数类型")
return func(*args, **kwargs)
return wrapper
def log_to_file(func):
logging.basicConfig(filename='function_log.log', level=logging.INFO,
format='%(asctime)s - %(message)s')
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
log_message = f"函数名: {func.__name__}, 传入参数: {args}, {kwargs}, 返回值: {result}"
logging.info(log_message)
return result
return wrapper
@log_to_file
@check_int_params
def add_numbers(a, b):
return a + b
你可以这样调用这个函数:
try:
result = add_numbers(3, 5)
print(result)
except ValueError as e:
print(e)
上述代码定义了两个装饰器:
check_int_params
装饰器用于检查传入函数的参数是否为整数类型,如果不是则抛出ValueError
异常。log_to_file
装饰器用于记录函数调用的日志到function_log.log
文件中,日志内容包含函数名、传入参数和返回值。
add_numbers
函数被这两个装饰器依次装饰,在调用 add_numbers
函数时,会先检查参数类型,然后记录日志。如果传入参数不是整数,会抛出异常。