Python异常与装饰器任务求助:已完成部分代码,求后续指导
完整实现代码
# 1. 自定义AuthError异常类 class AuthError(ArithmeticError): """授权验证失败时抛出的异常""" pass # 2. 授权验证装饰器 def require_auth(func): def wrapper(request_from_user, *args, **kwargs): # 检查请求中的授权数据,这里假设授权令牌存在于auth_token字段 if not request_from_user.get('auth_token'): raise AuthError("请求缺失授权数据") # 验证通过后执行原函数,返回RequestManager实例 return func(request_from_user, *args, **kwargs) return wrapper # 3. RequestManager类,包含两个验证方法 class RequestManager: def __init__(self, user_request): self.user_request = user_request def validate_token(self): """验证授权令牌有效性""" token = self.user_request.get('auth_token') # 示例验证逻辑:令牌长度不小于10视为有效 return len(token) >= 10 def validate_permission(self, required_perm): """验证用户是否拥有指定权限""" user_perms = self.user_request.get('permissions', []) return required_perm in user_perms # 4. Help类,包含Pi常量和至少3个方法 import math class Help: PI = math.pi # 使用math模块的精确圆周率值 @staticmethod def calculate_circle_area(radius): """计算圆的面积""" if radius <= 0: raise ValueError("半径必须大于0") return Help.PI * (radius ** 2) @staticmethod def calculate_circle_circumference(radius): """计算圆的周长""" if radius <= 0: raise ValueError("半径必须大于0") return 2 * Help.PI * radius @classmethod def get_pi_precision(cls, decimal_places=6): """返回指定小数位数的圆周率""" return round(cls.PI, decimal_places) @staticmethod def print_function_list(): """打印类的可用功能""" print("Help类支持以下操作:") print("- calculate_circle_area(radius): 计算圆的面积") print("- calculate_circle_circumference(radius): 计算圆的周长") print("- get_pi_precision(decimal_places): 获取指定精度的圆周率") # 测试示例 if __name__ == "__main__": # 模拟合法请求 valid_request = { 'auth_token': 'abc123xyz789', 'permissions': ['view', 'edit'] } @require_auth def process_request(request): return RequestManager(request) try: # 测试授权验证与RequestManager manager = process_request(valid_request) print("令牌验证结果:", manager.validate_token()) print("编辑权限验证结果:", manager.validate_permission('edit')) # 测试Help类 print("圆周率(保留4位小数):", Help.get_pi_precision(4)) print("半径为3的圆面积:", Help.calculate_circle_area(3)) Help.print_function_list() except AuthError as e: print("授权错误:", e) # 模拟缺失授权的请求 invalid_request = {} try: process_request(invalid_request) except AuthError as e: print("预期的授权错误:", e)
各模块说明
1. AuthError异常类
直接继承ArithmeticError,符合任务要求的继承关系,可根据需求扩展自定义错误信息逻辑。
2. 授权装饰器require_auth
- 包裹请求处理函数,先校验请求中的授权数据(这里以
auth_token字段为例,可根据实际场景修改校验规则) - 缺失授权数据时直接抛出
AuthError,验证通过后执行原函数并返回RequestManager实例
3. RequestManager类
- 初始化时接收用户请求数据并存储
validate_token:示例令牌验证逻辑,实际可替换为校验签名、过期时间等真实业务逻辑validate_permission:检查用户权限列表是否包含所需权限
4. Help类
- 定义
PI常量,使用math.pi保证精度 - 包含4个方法(满足至少3个的要求),覆盖圆周率相关计算与功能说明
内容的提问来源于stack exchange,提问作者user19401771
相关产品推荐
相关产品推荐

