はじめに
今回はPythondeconfigparserを使っていた時に起きたエラーについてです。
コードを書いていくうちに汎用性や見やすさの為に設定ファイルなどを外部ファイルに持たせるようにすると思います。
今回はそんなファイルを改修をしている時に起きたエラーです。
備忘録を兼ねて、起きたエラーの原因と対処方法とエラーが発生するプログラムの例などメモとして残すことにしました。
エラーの原因と対処方法
エラー
まず発生したエラーですが、
configparser.NoSectionError: No section: '***'
‘***’部分は任意の文字が来ます(状況で違います)
エラーの内容ですが日本語に訳すと
「configparser.NoSectionError: セクションが存在しません」
という意味になります。
原因と対処方法
原因
このエラーの「configparser」は、Pythonの標準ライブラリの一部で、設定ファイル(例えば.iniファイル)を解析するためのツールです。
NoSectionErrorは、指定したセクション(設定ファイルの一部)が存在しないときに発生します。
対処方法とサンプルプログラム
次にエラーが出るサンプルプログラムとそれを修正したプログラムの例をみます。
Pythonのmain.pyプログラムからconfig.iniファイルを読み込む状況を想定しています。
project/
│
├── config.ini
│
└── main.py
config.iniは次の通りです。
[SECTION1]
Key1=Value1
Key2=Value2
エラーが発生するサンプルプログラムは次になります。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
print(config.get('SECTION2', 'Key1')) # SECTION2は存在しないのでエラーになる
これを実行すると
configparser.NoSectionError: No section: 'SECTION2'
となります。
次はエラーが表示されないよう修正したサンプルプログラムです。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
try:
print(config.get('SECTION2', 'Key1')) # SECTION2は存在しない
except configparser.NoSectionError:
print("指定したセクションが存在しません。")
存在しないSECTION2にアクセスしますが、例外処理によってプログラムがエラーで終了しないようになります。
Tips
configparserの注意点は次の通りです。
- configparserは大文字と小文字を区別しないので、セクション名やキー名を指定するときは注意。
- configparserはセクションの存在をチェックするための専用のメソッド
has_section()
を提供しているので、存在しないセクションを参照する前にこのメソッドを使用するとエラーを避けることができます。
例外処理以外にもhas_section()を使うと言うのもありですね。
さいごに
今回はpythonでconfigparserを使った際に存在しないデータにアクセスした際に発生するエラーについてでした。
configparserは標準ライブラリなので知っていると便利だと思います。設定ファイルの読み込みの際は使ってみるのが良いと思います。
この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。