You need to enable JavaScript to run this app. Python自定义函数间传值方法及返回值调用AttributeError解决
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义函数间传值方法及返回值调用AttributeError解决

报错核心原因
  • rec()函数执行后会返回用户名、密码两个值自动打包形成的元组,元组属于Python的序列类型,仅支持通过下标索引取元素,不存在usr、pwd这类自定义的可访问属性
  • 代码中print(c.usr , c.pwd)的写法,是将c作为“带自定义属性的对象”取值,和rec函数实际的返回值结构完全不匹配,因此触发属性不存在的报错。若函数漏写return语句,拿到的返回值为None,也会触发同类NoneType无该属性的报错。
适配新手的正确实现方案

核心逻辑:函数间传值的本质是一个函数把return的内容,作为返回值传给调用它的函数,按照返回值的实际类型做对应取值即可,以下是两种可直接运行的带注释实现:

方案1:最简洁的元组解包(和原代码结构最贴近)

不需要额外的数据结构,直接利用Python原生的元组解包语法取返回值,适合纯新手快速上手:

# 定义rec函数:负责收集用户输入的账号信息
def rec():
    # 捕获用户输入的用户名,存入局部变量usr
    usr = input('Enter Name : ')
    # 捕获用户输入的密码,存入局部变量pwd
    pwd = input('Enter Password : ')
    # return 多个值时,Python会自动将两个值打包为元组返回给调用方
    return usr, pwd

# 定义show函数:负责拿到rec采集的信息并输出
def show():
    # 调用rec函数拿到返回的元组,直接解包为两个独立的变量usr_val、pwd_val
    # 等价于:c = rec() 之后 usr_val = c[0]、pwd_val = c[1]
    usr_val, pwd_val = rec()
    # 打印两个解包后的变量,完成展示
    print(usr_val, pwd_val)

# 程序执行入口:调用show函数触发完整流程
show()

方案2:匹配原代码点号取值的写法(用字典结构)

如果习惯用对象.字段名的逻辑取值,可以把返回值换成字典结构,用键值对存储账号信息,代码改动最小:

def rec():
    usr = input('Enter Name : ')
    pwd = input('Enter Password : ')
    # 返回字典结构,把用户名、密码存在对应名称的键下
    return {
        "usr": usr,
        "pwd": pwd
    }

def show():
    c = rec()
    # 字典通过方括号加键名,取到对应存储的内容
    print(c["usr"], c["pwd"])

show()

说明:如果一定要实现c.usr这种直接点号访问的语法,需要借助类封装自定义结构,对纯入门阶段的学习者来说,以上两种方案的学习成本更低,完全能满足函数间传值的练习需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 14:15:04