下記コードを作成しました。
test2.pyでtest1.pyのkeisanクラスをインポートしています。
test1.pyのなかで変数keyは存在しないので、test2.pyを実行したときに"おかしい"と表示させたいのですが、エラーハンドリングの仕方がわかりません。
どなたかご教示お願い致します
python
1##test1.py## 2class keisan(): 3 def tasu(self, x, y): 4 kei = x + y 5 try: 6 print(key) 7 except: 8 print("おかしい")
python
1##test2.py## 2from test1 import keisan 3 4q = keisan() 5q.tasu(1,3)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
余計なことしなければいいだけかと。
python
1class keisan(): 2 def tasu(self, x, y): 3 kei = x + y 4 print(key)
python
1from test1 import keisan 2q = keisan() 3try: 4 q.tasu(1, 3) 5except NameError as e: 6 print(e) 7#name 'key' is not defined
投稿2018/05/01 08:29
総合スコア317
0
ベストアンサー
ご質問のコードで「おかしい」とは表示されると思います。
ご質問の意図は何でしょうか?tasuメソッドが例外を呼び出し元へ発するようにして、それを呼び出した側のtest2.pyでハンドリングすることなら
python
1# test1.py 2class keisan(): 3 def tasu(self, x, y): 4 kei = x + y 5 print(key) 6 7# test2.py 8 9from test1 import keisan 10 11q = keisan() 12try: 13 q.tasu(1,3) 14except: 15 print("おかしい")
という感じです。tasuメソッドにバグがあっても呼び出し元で例外をハンドリングすればよいということです。元のコードでは例外がおきると分かっているのにtasuメソッドが自分自身で例外を「握りつぶしている=>なかったことにしている」ので呼び出し元へは例外が通知されません。
もし意図的に「例外が起こったとき、何かの例外処理をするがその例外を呼び出し元へも通知したい」なら以下のようにraiseしなおせばよいです。(あくまで例ですので下記のコードに意味があるとは思えませんが・・・)
python
1class keisan(): 2 def tasu(self, x, y): 3 kei = x + y 4 try: 5 print(key) 6 except Exceptioin as e: 7 print('exception: ', e) 8 raise e
投稿2018/05/01 08:25
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/01 09:06
2018/05/01 09:41
2018/05/01 09:41
0
すっごく雑なやり方かもしれませんが、
python
1 try: 2 print(key) 3 except: 4 print("おかしい")
を
python
1 try: 2 print(key) 3 except: 4 raise ValueError("おかしい")
とやると、test1 の方から ValueError
を投げられます。
後は test2 の方で投げられたエラーをどう処理するか書けば解決しそうな気がします。
投稿2018/05/01 08:21
総合スコア2244
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/01 09:31
2018/05/01 09:41
0
こんな感じで自作例外を定義しておき、
python
1class InvalidKeyException(Exception): 2 def __init__(self, message, key_val): 3 self.message = message 4 self.key_val = key_val
受ける側はこんな感じです。
python
1try: 2 raise InvalidKeyException("おかしい", -1) 3except InvalidKeyException as e: 4 print(e) # => ('おかしい', -1) ※tupleとして表示されるのはpython(というか継承元のException)の機能 5 print(e.message) # => おかしい 6 print(e.key_val) # => -1
keisan.tasuの中でraiseしてあげて、test2.pyでキャッチしてあげれば良い訳ですね。
投稿2018/05/01 08:20
編集2018/05/01 08:21総合スコア30933
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/01 09:32
2018/05/01 09:41
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/01 09:32
2018/05/01 09:41