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

调用函数未接收返回值引发NameError?Python代码问题求助

在函数内调用另一个函数可行吗?为什么调用后拿不到返回值触发NameError?

函数内调用其他函数完全可行,你触发NameError的核心原因是没有接收被调用函数的返回值,且对变量作用域理解有误。

错误原因分析

在generate_passwords函数的循环里,你执行了generate_password(length),但没有把这个函数返回的密码字符串存到任何变量里。而password变量是定义在generate_password函数内部的局部变量,它的作用域仅限于generate_password函数内部,generate_passwords函数根本无法直接访问这个变量,所以会报错“name 'password' is not defined”。

修正后的代码

import random

def generate_password(length):
    password = ""
    alpha_num = [i for i in 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789']
    # 修正循环条件,确保生成length位的密码(原<=会生成length+1位)
    while len(password) < length:
        symbol = random.choice(alpha_num)
        if symbol not in password:
            password += symbol
    return password

def generate_passwords(count, length):
    passlist = []
    for j in range(count):
        # 接收generate_password的返回值,赋值给password变量
        password = generate_password(length)
        if password not in passlist:
            passlist.append(password)
    print(passlist)        

n, m = int(input()), int(input())
generate_passwords(n, m)

额外优化说明

  1. 将import random移到文件顶部:避免在函数内部重复导入模块,符合Python代码规范
  2. 修正generate_password的循环条件:原len(password) <= length会生成比指定长度多一位的密码,改成< length后会生成刚好length位的密码
  3. 移除了generate_passwords里多余的import random:已经在顶部导入过,无需重复操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:53:12