Anaconda Navigatorが起動しない時の対処方法のメモ（「AttributeError: 'str' object has no attribute 'get'」のエラー）

以前、Windows7 のPCに **Anaconda3** をインストールしていました。
久しぶりに **Anaconda Navigator** を起動したところ「Loading Application」が表示されたままで起動しませんでした。
その時に対処した方法をメモとして残します。

# 1. 原因調査

アイコンから起動すると、「Loading Application」が表示されたままで起動しなかったので、一旦タスクマネージャーから **Python** のプロセスを停止させます。

**Anaconda Prompt** から`anaconda-navigator`コマンドで、**Anaconda Navigator**を起動します。
すると`anaconda_api.py`の811行目の`versions=[vsdata.get('productVersion')]`で「 AttributeError: 'str' object has no attribute 'get'」のエラーが発生していることがわかりました。

```console:実行結果
(base) C:\Users\yasushi>anaconda-navigator
2022-04-23 00:50:52,872 - ERROR download_api._get_url:378
Expecting value: line 1 column 1 (char 0)

Traceback (most recent call last):
  File "C:\DK\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 484, in setup
    self.post_setup(conda_data=conda_data)
  File "C:\DK\Anaconda3\lib\site-packages\anaconda_navigator\widgets\main_window.py", line 521, in post_setup
    self.tab_home.setup(conda_data)
  File "C:\DK\Anaconda3\lib\site-packages\anaconda_navigator\widgets\tabs\home.py", line 169, in setup
    self.set_applications(applications, packages)
  File "C:\DK\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 "C:\DK\Anaconda3\lib\site-packages\anaconda_navigator\api\anaconda_api.py", line 811, in process_apps
    versions=[vsdata.get('productVersion')],
AttributeError: 'str' object has no attribute 'get'
```

`anaconda_api.py`の811行目付近を見てみると以下となっていました。
```py:anaconda_api.py（803～818行目）
        # Add VSCode global app (if it does not exist as a conda package)
        if not vscode_conda_package_exists: 
            if self.is_vscode_available():
                vsdata = self.vscode_application_data()  # Check vscode version ← 806行目
                app = GLOBAL_VSCODE_APP
                applications[app] = dict(
                    name=app,
                    description=APPS_DESCRIPTIONS[app],
                    versions=[vsdata.get('productVersion')],   # ← 811行目
                    command=self._VSCODE_EXE,
                    image_path=image_paths[app],
                    needs_license=False,
                    non_conda=True,
                )

        return applications
```
811行目の
`versions=[vsdata.get('productVersion')],`
の`vsdata`の`get`メソッドでエラーが発生していました。
`vsdata`は806行目の
`vsdata = self.vscode_application_data()`
で設定されています。

そこで、`vscode_application_data`メソッドを検索してみました。
`vscode_application_data`付近のコードは以下となっています。

```py:anaconda_api.py（964～974行目）
    def vscode_application_data(self):
        """Get vscode data from microsoft rest api."""
        data = {}
        url = self._VSCODE_ENDPOINT     # ←967行目
        if url:
            data = self._download_api.get_url(
                url=url,
                as_json=True,
                non_blocking=False,
            )
        return data
```

967行目で`url = self._VSCODE_ENDPOINT`とurlが設定されているので、`_VSCODE_ENDPOINT`を検索してみました。
```py:anaconda_api.py（918行目）
        self._VSCODE_ENDPOINT = VSCODE_ENDPOINT
```

`VSCODE_ENDPOINT`が設定されているので、`VSCODE_ENDPOINT`で検索してみます。

```py:anaconda_api.py（902～905行目）
        VSCODE_ENDPOINT = (
            'https://vscode-update.azurewebsites.net/api/update'
            '/{}/stable/version'.format(VSCODE_SUBDIR)
        )
```

`VSCODE_SUBDIR`の値には`win32-x64`が設定されているため、`VSCODE_ENDPOINT`は
`https\://vscode-update.azurewebsites.net/api/update/win32-x64/stable/version`
となっており、このURLで接続できないのが原因のようです。


# 2. 対策方法

`https://vscode-update.azurewebsites.net/api/update/win32-x64/stable/version`
の代わりに
`https://update.code.visualstudio.com/api/update/win32-x64-user/stable/version`
を使用するように修正します。

`anaconda_api.py`の903、904行目を以下の通り修正します。

```py:anaconda_api.py（903～904行目）
-            'https://vscode-update.azurewebsites.net/api/update'
-            '/{}/stable/version'.format(VSCODE_SUBDIR)
+           'https://update.code.visualstudio.com/api/update'
+           '/{}-user/stable/version'.format(VSCODE_SUBDIR)
```

`anaconda-navigator`コマンドを実行したため、タスクマネージャーから **Python** のプロセスを停止させます。

アイコン（またはスタートメニュー）から **Anaconda Navigator** をクリックして起動し、正常に起動できることを確認します。

# 参考
+ [Anaconda Navigatorがアイコンから起動しない？](https://code-graffiti.com/anaconda-navigator-does-not-start/ "Anaconda Navigatorがアイコンから起動しない？")
+ [Anaconda Navigator won&#39;t launch, download_api error (Windows 10) - Stack Overflow](https://stackoverflow.com/questions/54947321/anaconda-navigator-wont-launch-download-api-error-windows-10 "Anaconda Navigator won&#39;t launch, download_api error (Windows 10) - Stack Overflow")
+ [Anacondaフラッシュバック問題 AttributeError: &#39;str&#39; オブジェクトには &#39;get&#39; 属性がない - BinaryDevelop](https://www.binarydevelop.com/article/anaconda-attributeerror-str-get-28676 "Anacondaフラッシュバック問題 AttributeError: &#39;str&#39; オブジェクトには &#39;get&#39; 属性がない - BinaryDevelop")
+ [Using IA&#39;s REST API to get latest version - Ignition - Inductive Automation Forum](https://forum.inductiveautomation.com/t/using-ias-rest-api-to-get-latest-version/56988 "Using IA&#39;s REST API to get latest version - Ignition - Inductive Automation Forum")


---

以上