質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

727閲覧

pythonで定数から値を取得して表示したい

pokemonta

総合スコア170

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

2クリップ

投稿2020/11/26 05:27

編集2020/11/26 14:44

プログラム初心者です。
pythonで定数に一致したメッセージを出力するプログラムを作成しています。
dictのような結果を出力したいのですが、
name 'messages' is not definedが発生してうまくいきません。
対応方法をご教示願います。

python

1class ErrorClass: 2 messages = { 3 'E400001': '桁数がおかしいです', 4 'E400002': '型がおかしいです', 5 'E400003': '値が存在しておりません。' 6 } 7 8 def set_errorMassage(code): 9 if code in messages: 10 self.error_info = {'code': code, 'message': messages['code'],'httpcode': code[1:4]} 11 else: 12 error_info = {'code': 'E400999', 'message': 'この操作は実行できません。','httpcode': '500'} 13 return self.error_info 14 15 def get_errorMassage(): 16 if self.error_info is not null: 17 error_info = {'code': '', 'message': '','httpcode': '200'} 18 return self.error_info 19 20if __name__ == "__main__": 21 set_errorMassage('E400001') 22 print(get_errorMassage)

dict

1//set_errorMassage('E400001') 2{'code': 'E400001', 'message': '桁数がおかしいです','httpcode': '400'} 3//ちなみにset_errorMassageがsetされない場合<エラーがない時> 4{'code': '', 'message': '','httpcode': '200'} 5//よくわからないエラーがでたとき 6{'code': 'E400999', 'message': 'この操作は実行できません。','httpcode': '500'}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

関数set_errorMassageself引数を持たせ、messagesself.messagesに編集すればよいと思われます。
また、関数名はset_error_messageのほうが良いというか、正しいです。Massageというとマッサージです。

投稿2020/11/26 16:53

編集2020/11/26 20:19
rtgsdfsdg

総合スコア174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

messagesはErrorClassクラスの中に入っているので、ErrorClass経由でしか使うことができません。
なので、messagesと書かれていても、未定義ということになります。

  • ErrorClassは不要ではないか?

この処理だけみると、ErrorClassは不要です。 messagesをトップルベルに出せば使えるようになります。

  • ErrorClassが必要な場合

このクラスが必要なのであれば、クラス変数としてアクセスする必要があります。
コードの中のmessagesを ErrorClass.messages に置き換えればOKです。

投稿2020/11/26 05:43

TakaiY

総合スコア13790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pokemonta

2020/11/26 05:47

このErrorClassは、共用資産として、他のpythonから使う想定でいます。 他のpythonのエラー発生個所でset_errorMassageを使います。 この場合、Class経由じゃないと無理だと思っていますがいかがでしょうか? 他のpythonで当該classをimportする。
TakaiY

2020/11/26 06:03

クラスでなくても、モジュールとして提供して、定数を定義することは問題なくできますよ。 ただ、改めてコードを見てみると、get_errorMessage は保存してあるエラーメッセージから情報を取り出すことになっているので、何らかの形でメッセージを保存する必要があるので、であれば、クラス化してそのデータを保持するようにしたほうがいいかもしれません。 クラスをインスタンス化して、インスタンス毎にメッセージを持てるようにするか、プロセス毎に1つでよければクラス変数でもいいでしょう。 クラスにするのであれば、set_errorMessage も get_errorMessage もクラスに含めるべきなので、インデントが足りません。 (よくみれば、selfを使っているのでそもそもそこが間違えているのかもしれませんね)
pokemonta

2020/11/26 14:43

set_errorMassage、get_errorMassageは、 ErrorClassのメソッドとして記載したつもりでしたが インデントのせいでクラス外と判断していたのですね。 ただ、set_errorMassageを右にずらしても(半角4つずらいしても)messageを参照できませんでした。 messageをクラス直下には置けないのでしょうか? クラス変数にすべきかインスタンス変数にすべきかですが 私の理解では、ErrorClassに対して、様々なプログラムからエラーメッセージを 参照しにきますので、それごとにerror_info の内容が異なると想定しています。 つまりerror_info を共有しないのでインスタンス変数を採用しようと思っています。 (オブジェクト指向の理解があっているか不安ですが。。) そもそもインスタンスの初期化処理もないので このような処理でよいのかもわかりません。やりたいことに対して 私のこの発想でよいのでしょうか?一般的にはどうすべきでしょうか?
TakaiY

2020/11/27 01:02

そういうことであれば、_DaRuMa_ さんの回答のように変更する必要があります。 messegesについては、外部から変更することは無いと思いますので、このままでいいとして、error_infoは__init__で初期化する必要があるでしょう。 また、クラスの定義のしかただけでなく、作ったクラスの使い方をふくめて知識が不完全に見うけられるので、そのあたりちゃんと調べなおしてやりなおしてみることをお勧めします。 また、このErrorClassについても、呼び出す側がインスタンス化して使うことになるわけで、使い勝手や必要な機能なども考えて、クラス化する必要があるかどうかを含めて再検討したほうがいいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問