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

Ruby中User类基于账户类型设置Permissions变量时为空问题

嘿,我来帮你搞定这个Permissions为空的问题!这种情况我碰到过好多次,大概率是JSON读取或者类初始化的逻辑出了点小纰漏,咱们一步步排查:

可能的问题与对应解法

1. JSON文件路径不对,根本没读到内容

很多时候会踩这个坑:你以为JSON和脚本在同一个文件夹,但实际运行脚本时的工作路径不一样,导致找不到文件。

解决办法:

  • 用绝对路径读取JSON,避免路径问题:
import json
import os

# 获取当前脚本所在的绝对目录
script_folder = os.path.dirname(os.path.abspath(__file__))
# 拼接JSON文件的完整路径
json_file_path = os.path.join(script_folder, "你的权限映射文件名.json")

# 读取JSON
with open(json_file_path, "r", encoding="utf-8") as f:
    permissions_map = json.load(f)

2. 账户类型和JSON里的键不匹配

比如你实例化时传的是"Admin",但JSON里的键是"admin"(大小写不一样),或者拼写错了,自然找不到对应的权限。

解决办法:

  • 实例化时打印下传入的账户类型和JSON里的所有键,对比是否一致:
class User:
    def __init__(self, account_type):
        self.account_type = account_type
        # 先读取权限映射(上面的路径代码)
        print(f"当前账户类型: {account_type}")
        print(f"JSON里的权限键: {list(permissions_map.keys())}")
        # 用get方法兜底,找不到就返回空列表
        self.Permissions = permissions_map.get(account_type, [])

3. 类的初始化逻辑有问题

比如你把Permissions定义成了类变量,或者在__init__外面赋值,导致实例化时没正确覆盖。

正确的User类示例:

import json
import os

class User:
    # 把权限映射设为类变量,避免每次实例化都读JSON,提升效率
    _permissions_cache = None

    def __init__(self, account_type):
        self.account_type = account_type
        # 第一次实例化时才读取JSON
        if not User._permissions_cache:
            script_folder = os.path.dirname(os.path.abspath(__file__))
            json_path = os.path.join(script_folder, "permissions_map.json")
            with open(json_path, "r", encoding="utf-8") as f:
                User._permissions_cache = json.load(f)
        # 赋值权限
        self.Permissions = User._permissions_cache.get(account_type, [])

# 测试一下
admin_user = User("admin")
print(admin_user.Permissions)  # 应该输出对应的权限列表
guest_user = User("guest")
print(guest_user.Permissions)

4. JSON文件本身有语法错误

比如漏了逗号、引号不配对,导致json.load()失败,但你没捕获异常,Permissions就没被赋值。

解决办法:

  • 加个异常捕获,快速定位问题:
try:
    with open(json_path, "r", encoding="utf-8") as f:
        permissions_map = json.load(f)
except json.JSONDecodeError as e:
    print(f"JSON格式错啦!错误位置: {e.pos}, 错误信息: {e.msg}")

另外,给你一个标准的权限映射JSON示例,你可以对照检查:

{
  "admin": ["创建用户", "修改权限", "删除内容"],
  "editor": ["编辑内容", "查看内容"],
  "guest": ["查看内容"]
}

内容的提问来源于stack exchange,提问作者Samuel B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:59:48