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

Python跨脚本调用类方法返回None的问题排查与解决方案

问题原因

  • 最核心的问题是你定义的getUserName()方法只直接返回初始化时设置为None的self.username,全程没有调用负责给self.username赋值的get_secret()方法,自然拿不到预期的凭证值。
  • 除此之外原始代码还有两处基础问题:
    • get_secret()方法下的所有代码缩进错误,Python会报语法错误无法运行
    • secret_name为空字符串、region_name变量未定义,调用AWS Secrets Manager接口会直接报错

修正方案

你给出的修正代码方向是对的,补全get_secret()的完整逻辑、修正缩进、补全缺失参数即可,完整可运行的参考代码如下:

脚本A(Script_A.py)

import boto3
import json

class A:
    def __init__(self):
        self.username = None        
        self.password = None
            
    def getUserName(self):
        # 先调用拉取凭证的方法给self.username赋值,再返回
        self.get_secret()
        return self.username
    
    def get_secret(self):
        # 补全你的secret名称和对应区域
        secret_name = "你的凭证在Secrets Manager里的ID"
        region_name = "你的AWS区域,比如cn-north-1"
        
        session = boto3.session.Session()
        client = session.client(
            service_name='secretsmanager',
            region_name=region_name
        )

        get_secret_value_response = client.get_secret_value(
            SecretId=secret_name
        )
    
        if 'SecretString' in get_secret_value_response:
            secret = get_secret_value_response['SecretString']
            creds = json.loads(secret)
            self.username = creds['username']
        else:
            # 补全二进制凭证处理逻辑
            pass

脚本B调用逻辑不变

from Script_A import A

credentials = A()
username = credentials.getUserName()
print(username)

优化建议

  • 如果需要频繁调用getUserName(),可以增加判断避免重复拉取凭证:只有self.username为None时才调用get_secret()
  • 建议给get_secret()增加异常捕获逻辑,处理AWS接口调用失败、凭证解析失败等异常场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:06:04