【报错】AttributeError: ‘Visdom‘ object has no attribute ‘win_exists‘

文章讲述了作者在使用Visdom时遇到的AttributeError,分析了可能的原因,包括visdom版本问题,最终通过更新Visdom版本解决了问题。文中提供了详细的操作步骤和解决思路,对于遇到类似问题的开发者具有参考价值。
摘要由CSDN通过智能技术生成

当bug体质发现网上缺少关于这个报错的解答(或者根据网上其他类似解答无法进行debug)时,咱们应该怎么做。讲一下我成功误打误撞解决标题这个问题的思路。

步骤1-3为思路+推测+验证,步骤4为报错问题解决方法,故可直接看步骤4。

步骤1:找到报错代码具体位置

(1)报错的代码:
常识再提:终端弹出的报错信息里,直接看最后一条,发现写了AttributeError: 'Visdom' object has no attribute 'win_exists',那么“报错的代码文件位置”就是这条报错信息上面的那个.py文件。点击蓝色字体,你就可以进入到文件里的具体报错位置了。
(2)报错代码的图片:报错部分代码

步骤2:分析报错问题的含义

释义:“Visdom”对象没有属性“win_exists”
可能原因推测:
(1)visdom弃用了该方法。
(2)import包的问题。
(3)vis.win_exists()中的vis不是visdom定义的。
(4)visdom版本问题。【本文就是这个原因】

步骤3:一对一判断推测正确性

1.判断visdom是否弃用了该方法
(1)问度娘:搜索AttributeError: 'Visdom' object has no attribute 'win_exists'查看是否有遇到同样问题的同胞
无,但发现有同类问题:AttributeError: ‘Visdom’ object has no attribute 'updateTrace’虽然很有道理并且他解决了问题,但关键是win_exists()这个方法搜不到代替的赋值方法,难道要尝试自己编写赋值语句!?或者改写if语句!?
然后我就不知天高地厚地试着改了一下if语句:
【you不要去改!这里只是记录解题思路and经验】
更改if语句代码的图片:
更改if语句代码
但我们知道,可能有多处引用了win_exists()方法,难道我们都要改吗?
查找文中有几处引用win_exists()方法的图片:
查找文中有几处引用win_exists()方法
有5处,看着不多,但你敢改吗?因为我的整个代码是github上根据权威论文下载的,所以我对他抱有很大的信任,至少他不会乱写,这个if语句肯定作者是能实现的。那么我就要权衡改与不改之间的利弊。
我默默地将我修改的代码注释掉… 最终没有尝试运行自己修改的代码。

(2)问度娘:搜索关键词vis.win_exists()
发现有:pytorch visdom可视化工具介绍等各种信息都证明,visdom这个工具未曾终身弃用这个方法。所以排除这个推测1。

2.判断是否是import包的问题
问度娘:搜索查看是否有AttributeError: 'Visdom' object has no attribute 'win_exists遇到同样问题的同胞。
无,但发现有类似问题:AttributeError: ‘xxx‘ object has no attribute ‘module‘,本着万变不离其宗的原则,我还是认真看了看、试了试,然后根据搜到的结果发现我遇到的报错和这个差之万里,除非在排除3、4造成报错仍不能解决的情况下,才可能用这个方法去debug。所以不纠结。

3.判断vis.win_exists()中的vis是否由visdom定义
我们可以发现vis是def visualize()函数的形参,那么只需要找到谁引用了该函数,就可以知到vis的定义类型是什么、怎么进行定义的。
调用visualize()函数的代码图片:
调用visualize()函数的代码
查找vis实参定义类型及方法的代码图片1、2:
代码图片1
代码图片2
可以确认vis是由visdom包中的函数定义的。排除推测3。

4.判断是否是visdom版本导致的问题
(1)根据“报错代码图片”发现vis分别使用了line()和win_exists()两个方法。按住ctrl键,将鼠标分别放在line和win_exists上,观察区别。发现只有在win_exists上时未变色、会出现“引用无转到的定义”,而在line上则能变成蓝色、可点击。
(2)查看visdom版本
发现版本为1.0.05
visdom原版本的图片:
visdom老版本图片
(1)+(2):综上可得出,可能是visdom版本过低导致的问题。(可能叫做不兼容,也可能叫做版本低visdom弃用了这个方法)但问题是,这个visdom包是我手动输入命令下载的,而且根据以前的经验(搜到的博文)来说,去官网手动下载包的命令随便选一个就行。所以我只能寄希望于这几条命令其实下载的visdom版本是不一样的。然后我尝试了一下,成功解决了问题!就有了步骤4,单独列出来写一个详细的安装思路。

步骤4:更新visdom版本方法

又叫做:手动下载visdom方法。
在新建一个env之后里面是空白的,所以需要导入visdom包。但会报错是吧?我遇到了:报错信息:PackagesNotFoundError: The following packages are not available from current channels
如何找到报错指示的图片:
如何找到报错指示
无法安装visdom报错信息的图片:
无法安装visdom报错信息
很多人可能看到“故障排除步骤2”就直接去终端运行代码了,但其实不用(因为还是会报错),这里我根据我搜到的资料(经验)发现,其实这张图片上的“命令输出”部分,下滑,就有提示:
命令输出中的有效提示信息的图片:
提示信息
点击进入https://anaconda.org网站
搜索演示的图片1-4:
图片1:###############################################################
手动下载visdom包方法-1
图片2:###############################################################

手动下载visdom包方法-2
图片3:###############################################################

手动下载visdom包方法-3
图片4:###############################################################
手动下载visdom包方法-4
好了,你再运行你的代码,这个问题解决了~

真无语啊,debug2天了,github上下载的代码还是有报错!!!我真服了版本兼容问题了,解决了无数的问题,真就bug体质,哭死。本文解决的问题网上暂无解决方法,故写一篇博文记录,期待有缘人和我遇到同样的问题,哈哈哈哈~debug就是一心态问题,因为很多报错已经有前辈遇到并整理了解决思路、方法,所以不用担心解决不了。当然,如果你也和我一样,遇到了一个网上没解决方法的报错,你可以尝试我的这种解决思路。不放弃,毕竟,独行侠不需要帮手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值