Python函数参数定义及内部变量外部调用报错解决方法
报错根因
你触发的AttributeError: 'function' object has no attribute 'request_symbol'来自两个核心问题:
- 混淆了变量作用域:函数内部定义的
request_symbol是局部变量,仅在函数执行过程中内部可见,外部全局环境无法直接访问 - 函数调用逻辑错误:调用函数时没有接收返回值,且大概率存在变量名/函数名重名、入参未提前赋值的问题,才会触发从函数对象上找不存在属性的报错。
函数参数声明规则
def定义函数时按以下规则声明参数即可:
- 所有入参直接写在函数名后的括号内,多个参数用逗号分隔,Python不需要提前声明参数类型,如需类型标注可在参数后加
: 类型(非强制) - 普通位置参数按定义顺序传值即可,也可以在调用时通过
参数名=值的形式指定传参,不用严格按顺序 - 函数内部赋值的变量(比如你代码里的
url、r、data_IS)全部是局部变量,生命周期仅在函数执行阶段,函数运行结束后就会被回收,外部不能直接读取。
正确使用方式
要拿到函数内部计算/生成的值,必须通过return把值返回,调用函数时用外部变量接住返回值才能后续使用,针对你这段代码的修正步骤:
- 补上缺失的
requests库导入 - 调用函数前,先给要传入的
symbol、api_key赋实际有效值 - 调用函数时,定义一个外部变量接收函数return的结果,不要直接访问函数内部的局部变量名
修正后的可运行代码:
import requests def request_income_statement(symbol, api_key): url = 'https://www.alphavantage.co/query?function=INCOME_STATEMENT&symbol=' + symbol + '&apikey=' + api_key r = requests.get(url) data_IS = r.json() request_symbol = data_IS.get('symbol') return request_symbol # 给入参赋实际值 input_symbol = "AAPL" input_api_key = "你自己的Alpha Vantage API密钥" # 调用函数,接收返回值 returned_symbol = request_income_statement(input_symbol, input_api_key) # 打印拿到的结果 print(returned_symbol)
额外注意点
- 传参时外部的变量名不需要和函数定义的入参名一致,比如上面代码用
input_symbol传给函数的symbol形参,完全不影响运行 - 不要试图通过给函数对象加属性的方式读取内部变量,这是不符合Python编码规范的写法,后续维护很容易出问题
- 如果接口请求失败,
data_IS可能没有symbol字段,建议加个异常判断避免返回None引发后续报错。
内容的提问来源于stack exchange,提问作者mptrsn217
相关产品推荐
相关产品推荐

