You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:27:39