【Python问题笔记1】joblib包memory模块参数变更导致mglearn使用时报错

本文记录了在使用mglearn包时遇到的一个错误,并详细解释了如何通过阅读源码找到问题原因,最后给出了修改建议。

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

前言

在学习机器学习算法的过程中,我使用到了名为mglearn的包,它可以用于美化绘图

问题

在运行程序时,程序发生了崩溃,下面是Traceback信息

Traceback (most recent call last):
  File "example1_flower.py", line 6, in <module>
    import mglearn
  File "D:\软件\python\lib\site-packages\mglearn\__init__.py", line 1, in <module>
    from . import plots
  File "D:\软件\python\lib\site-packages\mglearn\plots.py", line 14, in <module>
    from .plot_pca import plot_pca_illustration, plot_pca_whitening, plot_pca_faces
  File "D:\软件\python\lib\site-packages\mglearn\plot_pca.py", line 7, in <module>
    memory = Memory(cachedir="cache")
TypeError: __init__() got an unexpected keyword argument 'cachedir'

定位问题

在plot_pca.py文件中,调用了joblib包中的memory类,并对其进行实例化,我找到了该类的源码,发现了问题所在。(为了节约篇幅删去了部分内容)

class Memory(Logger):
    """ 
        Parameters
        ----------
        location: str, pathlib.Path or None
            The path of the base directory to use as a data store
            or None. If None is given, no caching is done and
            the Memory object is completely transparent. This option
            replaces cachedir since version 0.12.
    """
    # ------------------------------------------------------------------------
    # Public interface
    # ------------------------------------------------------------------------

    def __init__(self, location=None, backend='local',
                 mmap_mode=None, compress=False, verbose=1, bytes_limit=None,
                 backend_options=None):

可以发现类中确实没有出现参数cachedir,再仔细查看注释:

This option replaces cachedir since version 0.12.

原来该参数已被弃置,现在应使用参数location。

解决方案

将文件plot_pca.py、plot_nmf.py中的memory = Memory(cachedir="cache")改成memory = Memory(location="cache")

小结

养成读源码的习惯是非常重要的!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬铃木下的青春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值