TypeError: __init__() got an unexpected keyword argument ‘app_private_key_path

在Django项目中集成支付宝支付时遇到TypeError: __init__() got an unexpected keyword argument 'app_private_key_path'的问题。问题源于使用的python-alipay-sdk版本与代码不兼容。解决方案包括降级sdk到低版本或更新代码以适配3.0.4版本的初始化方式。两种方法已验证可行。

django项目对接支付宝支付接口的时候报错如下:

debug=settings.ALIPAY_DEBUG

TypeError: __init__() got an unexpected keyword argument 'app_private_key_path

代码如下

        # 创建支付宝支付接口的sdk对象
        alipay = AliPay(  # 传入公共参数,对接任何接口都要传递的
            appid=settings.ALIPAY_APPID,  # 应用id
            app_notify_url=None,  # 默认回调url,若采用同步通知则不传
            # 应用的私钥和公钥路径
            app_private_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/app_private_key.pem"),
            alipay_public_key_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), "keys/alipay_public_key.pem"),
            sign_type="RSA2",
            debug=settings.ALIPAY_DEBUG
        )

原因是我用的python-alipay-sdk是最新的3.0.4,我写的代码适用于3.0之前版本,所以出错。有两种方法解决:

一是卸载掉原先的sdk,安装低版本的python-alipay-sdk。

另一种方法是改自己的代码,原作者有提供3.0版本的初始化例子(

### 解决方案 在Python中遇到 `TypeError: __init__() got an unexpected keyword argument 'default'` 的错误,通常是因为传递给某个类或函数的参数名称不匹配或未被支持。以下是导致此问题的可能原因及解决方案: #### 1. 参数名称错误 检查代码中是否正确使用了目标类或函数的参数名称。如果参数名称拼写错误或目标类/函数未定义该参数,则会引发此错误。 例如: ```python class MyClass: def __init__(self, value): self.value = value # 错误示例:传递了未定义的参数 'default' obj = MyClass(default=10) # TypeError: __init__() got an unexpected keyword argument 'default' ``` **解决方法**:确保传递的参数与类或函数定义中的参数名称一致[^3]。 #### 2. 使用了不兼容的库版本 某些库在不同版本中可能更改了其类或函数的签名。如果使用的库版本较旧或较新,可能会导致参数名称不再有效。 例如,在某些版本的 `argparse` 模块中,`add_argument` 方法可能不支持 `default` 参数。 **解决方法**:确认所使用的库版本,并查阅对应版本的文档以验证参数的有效性。必要时升级或降级库版本[^4]。 #### 3. 自定义类或函数的问题 如果错误发生在自定义类或函数中,可能是由于以下原因之一: - 在继承的父类中未定义该参数。 - 忘记在 `__init__` 方法中添加所需的参数。 例如: ```python class ParentClass: def __init__(self, value): self.value = value class ChildClass(ParentClass): def __init__(self, default): # 错误:未调用父类的 __init__ 方法 self.default = default # 触发错误 child = ChildClass(default=10) # TypeError: __init__() got an unexpected keyword argument 'default' ``` **解决方法**:确保子类正确调用父类的构造函数,或者在定义类时包含所有必要的参数[^5]。 #### 示例代码 以下是一个修复后的示例: ```python class ParentClass: def __init__(self, value): self.value = value class ChildClass(ParentClass): def __init__(self, value, default): super().__init__(value) # 调用父类的构造函数 self.default = default # 正确创建对象 child = ChildClass(value=5, default=10) print(child.value, child.default) ``` ### 总结 `TypeError: __init__() got an unexpected keyword argument 'default'` 的错误通常是由于参数名称错误、库版本不兼容或自定义类定义不当引起的。通过仔细检查代码和相关库的文档,可以有效定位并解决问题。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值