Anaconda闪退的问题AttributeError: 'str' object has no attribute 'get'

今天不知道什么原因, 突然anaconda-navigator界面无法启动,闪退,用prompt打开,报错如下,

anaconda-navigator
2019-03-01 20:27:19,492 - ERROR download_api._get_url:416
Expecting value: line 1 column 1 (char 0)

Traceback (most recent call last):
  File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 539, in setup
    self.post_setup(conda_data=conda_data)
  File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 576, in post_setup
    self.tab_home.setup(conda_data)
  File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\tabs\home.py", line 169, in setup
    self.set_applications(applications, packages)
  File "d:\Anaconda3\lib\site-packages\anaconda_navigator\widgets\tabs\home.py", line 204, in set_applications
    apps = self.api.process_apps(applications, prefix=self.current_prefix)
  File "d:\Anaconda3\lib\site-packages\anaconda_navigator\api\anaconda_api.py", line 888, in process_apps
    versions=[vsdata.get('productVersion')],
AttributeError: 'str' object has no attribute 'get'

这可真是奇了,于是打开原码看了一下,vsdata的version没有信息,那么vsdata此时应该是无法访问的,因为出问题了,

d:\Anaconda3\lib\site-packages\anaconda_navigator\api\anaconda_api.py", 第888行写的是,


        if not vscode_conda_package_exists:
            if apps_vscode_enable and self.is_vscode_available():
                vsdata = self.vscode_application_data()  # Check vscode version
                app = GLOBAL_VSCODE_APP
                display_name = 'VS Code'
                #print("vsdata", vsdata)

                applications[app] = dict(
                    name=app,
                    display_name=display_name,
                    description=APPS_DESCRIPTIONS[app],
                    versions=[vsdata.get('productVersion')],
                    command=self._VSCODE_EXE,
                    image_path=image_paths[app],
                    needs_license=False,
                    non_conda=True,
                )

那么沿这这条线查了一下vscode_data, 并添加了一句打印代码,如下,

def vscode_application_data(self):
        """Get vscode data from microsoft rest api."""
        data = {}
        url = self._VSCODE_ENDPOINT
        print("vscode endpoint url:", url) //本人添加的调试代码
        if url:
            data = self._download_api.get_url(
                url=url,
                as_json=True,
                non_blocking=False,
            )
        return data

找印结果如下,

vscode endpoint url: https://update.code.visualstudio.com/api/update/win32-x64-user/stable/version

我查了一下,这个url此时是无效的,也就是说vscode的官方网站今天有问题,导致vscode无法访问用不了。

总结原因:

是无法访问vscode网站导致anaconda-navigator不能启动,(不能在anaconda-navigator界面中启动vscode图标)

解决办法:

更具体我也不知道怎么办,于是干脆注释掉这一段,

“”“
        if not vscode_conda_package_exists:
            if apps_vscode_enable and self.is_vscode_available():
                vsdata = self.vscode_application_data()  # Check vscode version
                app = GLOBAL_VSCODE_APP
                display_name = 'VS Code'
                #print("vsdata", vsdata)

                applications[app] = dict(
                    name=app,
                    display_name=display_name,
                    description=APPS_DESCRIPTIONS[app],
                    versions=[vsdata.get('productVersion')],
                    command=self._VSCODE_EXE,
                    image_path=image_paths[app],
                    needs_license=False,
                    non_conda=True,
                )
"""

现在的问题来了, anaconda能正常启动,但是vscode还是不能出现在图形界面中,先这么这吧!真不喜欢这些抽风的问题,费时间!

那么这时如何在特定环境中启动vscode呢,比如我要启动的环境名称是torch, 那么,

Anaconda Prompt ===>>> conda activate torch ===>>> code (启动vscode, 一般安装目录能自动识别,如果找不到就搜索一下吧)

进入界面后,启动vscode的terminal, 同样 conda activate torch一下,注意,” conda activate torch“这一句写了两次,实际上你只需要运行一次即可,要么在Anaconda Prompt中,要么在vscode的terminal中,效果是一样的。

唯一不爽的是,你不能在anacona-navigator的图形界面中启动vscode。

后续正常情况

当然,如果第二天发现vscode官网可以正常访问了,你把注释的代码改回了就是了,一切都会恢复正常!!!

此时如果把那个能访问的vsdata打印出来,就是

vscode endpoint url: https://update.code.visualstudio.com/api/update/win32-x64-user/stable/version

vsdata {'url': 'https://vscode.cdn.azure.cn/stable/1b8e8302e405050205e69b59abb3559592bb9e60/VSCodeUserSetup-x64-1.31.1.exe', 'name': '1.31.1', 'version': '1b8e8302e405050205e69b59abb3559592bb9e60', 'productVersion': '1.31.1', 'hash': '43c2aecb9e1d65759dbe11ee5cb62030a2d06567', 'timestamp': 1549938223872, 'sha256hash': 'f213ab6f6646bd80b0606e3d52db9219eb539f586779720e52ed12b9d9732fb1', 'supportsFastUpdate': True}

如果你嫌麻烦,要避免网络原因导致的vscode问题,那么可以把上面代码中的version信息改一下,这时vscode不再查检更新情况,

把
versions=[vsdata.get('productVersion')],
改成
versions=["1b8e8302e405050205e69b59abb3559592bb9e60"],


 

posted @ 2019-03-01 22:03  SpaceVision  阅读(53)  评论(0编辑  收藏  举报