めも

メモ.

【エラー解決】python3.8でtomlファイルを読み込み時に toml.decoder.TomlDecodeError

現象

python3.8 にてtomlファイルを読み込む箇所にて

toml.decoder.TomlDecodeError: Found invalid character in key name: '['. Try quoting the key name. (line 1 column 2 char 1)

のエラーが出る。原因は元のファイルをBOMありUTF-8で記述していたため。

解決策

今日時点ではtomlファイルはユニコード(UTF-8)でエンコードするのが仕様であるため、UTF-8にする。

A TOML file must be a valid UTF-8 encoded Unicode document. [ドキュメントの引用元]


エラーメッセージで検索したものの、同じ原因のものが見つからなからなそうだった。 以下のtomlのリポジトリを確認し、読み込みたいファイルのフォーマットが正しいことを確認している最中に仕様の説明を見て解決。

もしも何らかの特別な理由でtomlファイルをutf-8以外で記述している場合は f.read().decode(文字コード名)として読み込む。例えばBOMありUTF8ならば

import toml
with open('example.toml', 'rb') as f:
    setting = toml.loads(f.read().decode('utf-8-sig'))

などとしてsettingにtomlファイルの内容を読み込むことができるが、仕様に指定されたように元ファイルをUTF-8にするべき。