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

Python编写token生成器遇NameError及buy_tokens打印函数地址问题

问题排查与修复方案

问题1:NameError: name 'token' is not defined 错误成因

你在全局选择购买token的分支中,直接调用buy_tokens(token),但token变量仅在token_generator函数的局部作用域内定义,全局作用域从未声明过该变量,调用时找不到对应变量就会抛出未定义错误。

问题2:调用buy_tokens未正常生成打印token的成因

buy_tokens函数本身没有实现token生成逻辑,完全依赖入参的token值,即便解决了变量未定义的问题,你也没有根据用户选择的购买档位生成对应长度的token。另外原token_generator函数的返回值是openfile函数的执行结果,而openfile没有定义返回值,默认返回None,也无法拿到生成好的token值。

修复建议

  • 抽离公共的token生成逻辑为独立函数,避免重复代码,同时让生成token的函数直接返回生成完成的字符串,方便后续调用
  • 调整buy_tokens函数,移除不必要的token入参,内部根据用户选择的档位生成对应长度的token
  • 修正全局调用buy_tokens的逻辑,不需要传入未定义的变量
  • 可选优化:原openfile函数用的是w写入模式,每次写入会覆盖之前的token,如果需要留存历史生成记录,可以改成a追加模式

修复后核心代码示例

from random import randint
import string
import time
import random
import os

print("Tokens are saved to your tokens.txt file. \n \n \n")

def openfile(token):
    save_path = r"C:\Users\User\Desktop"
    file_name = "tokens.txt"
    full_name = os.path.join(save_path, file_name)
    print(full_name)
    # 改成a模式可以保留历史token,每次换行追加
    file1 = open(full_name, "a", encoding="utf-8")
    file1.write(str(token) + "\n")
    file1.close()

# 抽离公共生成函数
def generate_token(length, extra_word=""):
    all_chars = string.ascii_letters + string.digits + string.punctuation
    base_token = "".join(random.sample(all_chars, length))
    final_token = base_token + extra_word
    print(final_token)
    return final_token

def token_generator():
    print("欢迎使用免费token生成器,作者:Thomas")
    token_length = int(input("\n请输入你想要生成的token长度:\n"))
    token_word = input("请输入你想在token中添加的便于记忆的自定义内容(可不填):\n")
    print("正在生成token.......")
    time.sleep(random.randint(1, 5))
    print("\nToken可用于生成随机字符串混淆配置信息,生成结果已保存到tokens.txt文件:\n")
    token = generate_token(token_length, token_word)
    openfile(token)
    return token

def buy_tokens():
    total_dirtycoins = 150
    print("欢迎来到token商店,单个基础token售价50金币,您当前账户余额为150金币")
    print("购买小型token:50金币(1)\n购买中型token:100金币(2)\n购买大型token:150金币(3)")
    selection_mode = input("输入'1'选择选项1,输入'2'选择选项2,输入'3'选择选项3:\n请输入:")
    length_map = {"1": 10, "2": 20, "3": 30}
    cost_map = {"1": 50, "2": 100, "3": 150}
    type_map = {"1": "小型", "2": "中型", "3": "大型"}
    if selection_mode in length_map:
        total_dirtycoins -= cost_map[selection_mode]
        token = generate_token(length_map[selection_mode])
        print(f"您已成功购买{type_map[selection_mode]}token,生成结果已保存到桌面的tokens.txt文件中")
        print(f"您的账户剩余金币:{total_dirtycoins}")
        openfile(token)
    else:
        print("购买失败,权限拒绝。")

select_market = input("选择功能:选项1:自定义生成token,选项2:购买token\n")
if select_market == "1":
    token_generator()
elif select_market == "2":
    buy_tokens()
else:
    print("未找到对应功能,权限拒绝。")

内容的提问来源于stack exchange,提问作者thomas theocharis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 08:30:02