[Python]「TypeError: string indices must be integers, not str」の原因と解決方法

2022年1月9日日曜日

Python

Python「TypeError: string indices must be integers」のエラー原因と解決方法を紹介します。

結論

まず、出力されたエラーの内容を見てみましょう。
「TypeError: string indices must be integers」は、「文字列のインデックスはstring型ではなくint型でなければならない」という意味です。

このエラーが発生するサンプルプログラムを見てみます。

  1. sample_str = 'sample'
  2. print(sample_str[0]) # s
  3. print(sample_str['s']) # TypeError: string indices must be integers

文字列sample_strに対してstring型のインデックスを指定しているためエラーが発生します。

スポンサーリンク

よくある原因

想定外のJsonをパースしている

表題のエラーが発生する最も多い原因ではないでしょうか?
dictのkeyのつもりでオブジェクトを参照しているが、dictではなかった場合に発生します。

  1. import json
  2. expect_json = {"result":{"a":1}}
  3. expect_json_str = json.dumps(expect_json)
  4. unexpect_json = {"result":"a"}
  5. unexpect_json_str = json.dumps(unexpect_json)
  6.  
  7. # key->"a"のvalue->1を参照
  8. json_dict = json.loads(expect_json_str)
  9. print(json_dict["result"]["a"]) # 1
  10.  
  11. # dictではないためエラー
  12. json_dict = json.loads(unexpect_json_str)
  13. print(json_dict["result"]["a"]) # TypeError: string indices must be integers

エラーが発生したときのチェックポイント

  1. stringのインデックスはint型ですか?
  2. dictを想定しているオブジェクトがstringになっていないか?

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology