okihara6
@okihara6 (selecao)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

辞書の使い方について

解決したいこと

辞書の使い方について

発生している問題・エラー

現在、Pythonで小さなテストプログラムを作成しています。
処理ループを実行していく関数とは別にエラーに対応する関数も作成しています。
そこで、エラーに対応する関数について、具体的なエラーメッセージや関数の状態を辞書なりに
格納して参照表示する事を考えています。

検討しているのは、関数別にメッセージや状態を格納する辞書を作成する方がいいのか?
プログラム全体のメッセージや状態を格納する辞書を作成する方がいいのか?
ケースで違うかもしれませんが、どちらがプログラムの品質として良いとおもわれますか?

・関数別に辞書を作成した場合、その関数に関連した情報のみを格納できます。
・プログラム全体として辞書を作成した場合、プログラムであれこれ個別に辞書を作成する必要がなくなる。

参考意見を頂けますと幸いです。


※外部ファイルにメッセージや状態を記録するのは、今はまだ考えていません。
以上、よろしくお願いいたします。
0

1Answer

プログラム全体のメッセージや状態を格納する辞書を作成する

個人的にこっちのほうがいいかなと思いました。
どういったエラーメッセージがあるかわかりませんが、全く同じエラーメッセージを出すことがあったり、一部分だけ異なるエラーメッセージがあったりする場合があると思います。
そういった場合に、少し文章の内容を変えたい場合、関数別に辞書を作成していると、すべてのメッセージを変更する必要が出てきます。
ですので、保守性高める意味でエラーメッセージは1つの辞書に管理しておいた方がいいと思いました。

以下は、メッセージコードとメッセージ内容を管理した辞書のイメージです。
「002」のように、「○○の値が不正です。」を「○○の値を修正してください。」に変更しようと思った場合に、1か所だけ修正すれば済むようになります。

messages = {}
messages['001'] =  '必須項目が入力されていません。。'
messages['002'] =  '{0}の値が不正です。'

print(messages['002'].format('住所'))
#住所の値が不正です。

print(messages['002'].format('メールアドレス'))
#メールアドレスの値が不正です。

※「002」はformatを呼ばないと「'{0}の値が不正です。」と表示されてしまいます。
ですので、実際に置換フィールドを使用したメッセージを利用する場合は、メッセージ内容の置換フィールドの数だけ置換用の文字列が指定されないとエラーにするようなメソッドなりをかましていい感じにすべきだと思います。

1Like

Comments

  1. @okihara6

    Questioner

    回答と補足情報をいただきありがとうございました。
    なるほどと感じました。
  2. @okihara6

    Questioner

    追加ですいません。

    def input_fnc(input_s,r_data):

    .....何か処理....
    .....エラー発生....
    r_data['err']=msg
    r_data['input_s']=input_s #入力の退避
    return r_data

    r_data = input_fnc(input_s,r_data)

    この場合、r_dataにエラーメッセージを格納しましたが、
    r_dataに入力データの退避もしますか?
    別にしますか?
  3. その後r_dataをどのように扱うかどうか次第だと思います。
    エラーメッセージを出すためだけなのであればr_dataに入力情報を含めず、ファンクションの中でエラーメッセージにその入力情報も付与した形で返してあげた方がすっきりするかなと思います。
  4. @okihara6

    Questioner

    ありがとうございました。

Your answer might help someone💌