通用思路:typeerror: __init__() got an unexpected keyword argument ‘XXX‘

文章讲述了在使用tiny-imagenet包时遇到TypeError,原因是tensorflow_datasets版本过新,不再支持urls参数。作者通过查看源代码定位问题,发现从tensorflow_datasets2.0.0版本开始,urls被替换为homepage。将tiny-imagenet代码中的urls改为homepage后,问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我使用tiny-imagenet包出现问题。

typeerror: __init__() got an unexpected keyword argument 'urls'

步骤如下:

1、明确问题出现原因,根据报错定位到对应的包的报错位置

包可以从

Linux:
/home/<用户名>/anaconda3/envs/<虚拟环境名>/lib/python<版本号>/site-packages/
windows:
C:\Users\<用户名>\Anaconda3\envs\<虚拟环境名>\Lib\site-packages\

中去找。

我的报错位置如下: 

def _info(self):
        return tfds.core.DatasetInfo(
            builder=self,
            description=("""Tiny ImageNet Challenge is a similar challenge as ImageNet with a smaller dataset but
                         less image classes. It contains 200 image classes, a training
                         dataset of 100, 000 images, a validation dataset of 10, 000
                         images, and a test dataset of 10, 000 images. All images are
                         of size 64×64."""),
            features=tfds.features.FeaturesDict({
                "image": tfds.features.Image(shape=(64, 64, 3), encoding_format="jpeg"),
                "id": tfds.features.Text(),
                "label": tfds.features.ClassLabel(num_classes=200),
            }),
            supervised_keys=("image", "label"),
            urls=["https://tiny-imagenet.herokuapp.com/"],
            citation=r"""@article{tiny-imagenet,
                              author = {Li,Fei-Fei}, {Karpathy,Andrej} and {Johnson,Justin}"}""",
        )

问题出现在tfds.core.DatasetInfo这个类,其中使用了urls参数。

所以,可以合理推断是下载的tfds(tensorflow_datasets)的版本不对。

2、尝试不同的版本

到github看tiny-imagenet上传的大致时间,根据该时间推测作者最有可能使用的tensorflow_datasets的版本,然后我安装了tensorflow_datasets 2.0.0的版本,发现问题。

原来是自tensorflow_datasets 2.0.0起,urls被淘汰了,改用homepages。

修改tiny_imagenet的错误部分,结果如下:

    def _info(self):
        return tfds.core.DatasetInfo(
            builder=self,
            description=("""Tiny ImageNet Challenge is a similar challenge as ImageNet with a smaller dataset but
                         less image classes. It contains 200 image classes, a training
                         dataset of 100, 000 images, a validation dataset of 10, 000
                         images, and a test dataset of 10, 000 images. All images are
                         of size 64×64."""),
            features=tfds.features.FeaturesDict({
                "image": tfds.features.Image(shape=(64, 64, 3), encoding_format="jpeg"),
                "id": tfds.features.Text(),
                "label": tfds.features.ClassLabel(num_classes=200),
            }),
            supervised_keys=("image", "label"),
            homepage="https://tiny-imagenet.herokuapp.com/",
            citation=r"""@article{tiny-imagenet,
                              author = {Li,Fei-Fei}, {Karpathy,Andrej} and {Johnson,Justin}"}""",
        )

urls一行变成了 homepage="https://tiny-imagenet.herokuapp.com/"

问题解决啦~~~~~

<think>好的,我现在需要解决用户在Python中遇到的TypeError问题,具体是GetDomainListResp的__init__方法接收到了未预期的关键字参数'requsetId'。首先,我得分析可能的原因。 根据用户提供的错误信息,问题出现在初始化GetDomainListResp对象时传入了未预期的参数'requsetId'。这可能是因为参数名拼写错误,比如用户可能想传的是'requestId'但拼错了。或者,这个类本身并没有定义这个参数,导致传入时引发错误。 接下来,我需要检查用户代码中的调用部分,确认参数名是否正确。比如,检查是否有requsetId中的字母顺序错误,正确应该是requestId。另外,查看GetDomainListResp类的定义,确认其__init__方法接受的参数列表,是否存在requsetId或者正确的参数名。如果类定义中没有这个参数,就需要移除或者修正它。 另外,可能用户使用的库版本更新,导致参数名称发生了变化,这时候需要查阅最新的官方文档,确认正确的参数名称。如果用户自己定义的类,可能需要检查__init__方法的定义,确保所有传入的参数都被正确声明。 还有一种情况是,可能存在参数传递时的多层调用,比如在某个函数中构造GetDomainListResp时,从其他部分获取的参数包含了requsetId,这时候需要追溯参数的来源,确保传递的参数名正确。 解决方法方面,首先建议用户检查拼写,修正可能的拼写错误。其次,核对文档或类定义,确保参数名正确。如果参数确实不存在,需要移除或替换为正确的参数。如果问题依旧存在,可能需要检查是否有库的版本问题,或者联系库的维护者确认参数变更情况。 此外,用户可能需要使用inspect模块来查看类的参数列表,或者使用IDE的自动补全功能来确保参数名的正确性。如果requsetId是动态生成的,可能需要添加验证步骤,确保参数名符合预期。 最后,总结解决步骤:检查拼写→核对文档→修正参数→验证解决。同时提醒用户在编码时注意参数名称的正确性,使用工具辅助检查,避免类似错误再次发生。</think>### 解决方案:Python TypeError: GetDomainListResp.__init__() unexpected keyword argument 'requsetId' 此错误通常由**参数名拼写错误**或**类定义与实例化参数不匹配**导致。以下是逐步排查和解决方法: --- #### **1. 检查参数名拼写** 错误中提到的参数是 `requsetId`,但正确拼写可能是 `requestId`(注意 `u` 和 `e` 的顺序)。 **操作步骤:** - 在代码中全局搜索 `requsetId`,替换为 `requestId`。 - 若为第三方库的类(如自动生成的API客户端代码),检查官方文档确认参数命名规范[^1]。 --- #### **2. 核对类的定义** 若 `GetDomainListResp` 是自定义类,需检查其 `__init__` 方法是否接受 `requestId` 参数。 **示例代码分析:** ```python class GetDomainListResp: def __init__(self, request_id: str, domains: list): # 正确参数名为 request_id self.request_id = request_id self.domains = domains # 错误调用:传递了未定义的 requsetId resp = GetDomainListResp(requsetId="123", domains=[]) # ❌ 触发TypeError # 正确调用: resp = GetDomainListResp(request_id="123", domains=[]) # ✅ ``` --- #### **3. 使用动态参数检查** 若类定义无法直接查看(如自动生成代码),可通过以下方式获取合法参数列表: ```python import inspect # 获取 __init__ 方法的参数列表 params = inspect.signature(GetDomainListResp.__init__).parameters print("合法参数名:", list(params.keys())) # 例如: ['self', 'request_id', 'domains'] ``` --- #### **4. 处理第三方库的兼容性** 若参数名确认无误但仍报错,可能是库版本升级导致接口变更: - 检查库的更新日志或文档,确认参数是否已弃用/重命名。 - 降级到兼容版本(如 `pip install library==x.x.x`)。 --- ### **错误示例与修正** **错误代码:** ```python from some_api_client import GetDomainListResp # 参数名拼写错误 resp = GetDomainListResp(requsetId="abc123", domains=["example.com"]) ``` **修正后:** ```python # 修正为正确的参数名(如 requestId 或 request_id) resp = GetDomainListResp(requestId="abc123", domains=["example.com"]) # 根据库实际命名调整 ``` --- ### **总结** | 步骤 | 操作 | 工具/方法 | |------|------|-----------| | 1 | 检查拼写 | IDE拼写检查、全局搜索 | | 2 | 核对类定义 | 查看源码或文档 | | 3 | 动态检查参数 | `inspect` 模块 | | 4 | 处理版本问题 | 版本管理工具(如 `pip`) | 通过以上步骤,可快速定位并解决参数不匹配问题。若仍无法解决,建议提供完整的类定义或库名称以进一步分析。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值