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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

3回答

1421閲覧

Pythonでの実行時エラーと例外処理について質問です。

python365

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2020/11/15 13:50

前提・実現したいこと

Pythonでの実行時エラー(例外)と例外処理について2点質問です。
複数の例外処理を書いたコードがうまく起動しません。。

①以下のエラーが生じるのですが、以下のエラーが生じないように8行目でZeroDivisionErrorを指定したはずなのですが、なぜ正しく動作しないのでしょうか?
②3行目のValueErrorは正しく動作するのですが、そこで終了とならずに2つ目のtryに進んでしまいます。1つ目のtryに引っかかった時に2つ目のtryにいかずに処理を終えるためにはどうコーディングすればよいでしょうか?

宜しくお願い致します。

書いたコード

try: a = int(input("割られる数を入力してください:")) except ValueError: print("エラー:数値を入力してください") #pass try: b = int(input("割る数を入力してください:")) except ZeroDivisionError: print("エラー:0で割り算しないでください") else: c = a / b print(f"{a} ÷ {b} = {c}") finally: print("処理を終了します")

###エラーメッセージ

--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) <ipython-input-49-dab10f39c609> in <module> 10 11 else: ---> 12 c = a / b 13 print(f"{a} ÷ {b} = {c}") 14 ZeroDivisionError: division by zero

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

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

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

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

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

guest

回答3

0

ValueError は 数値でない文字列を数値に変換しようとしたときに起きるので、発生するのは、

python

1 a = int(input("割られる数を入力してください:")) 2 b = int(input("割る数を入力してください:"))

この2つの、intを呼んているところですので、この2つをtryで囲めばOKです。
また、例外が発生したときに、先に進まなようにするには、except処理の中で、処理を終了する必要があります。

ZeroDivisionError は ゼロで割り算をると起きるので、発生するのは

python

1c = a / b

この計算ですから、ここをtryで書こむ必要があります。
なので、こんな感じでしょう

python

1try: 2 a = int(input("割られる数を入力してください:")) 3 b = int(input("割る数を入力してください:")) 4except ValueError: 5 print("エラー:数値を入力してください") 6 exit() 7try: 8 c = a / b 9 print(f"{a} ÷ {b} = {c}") 10except ZeroDivisionError: 11 print("エラー:0で割り算しないでください") 12 13print("処理を終了します")

投稿2020/11/15 14:11

TakaiY

総合スコア12830

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

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

0

ベストアンサー

処理はtryの中にまとめて、発生する可能性のあるErrorをexceptでキャッチしましょう。

Python

1try: 2 a = int(input("割られる数を入力してください:")) 3 b = int(input("割る数を入力してください:")) 4 c = a / b 5 print(f"{a} ÷ {b} = {c}") 6except ValueError: 7 print("エラー:数値を入力してください") 8except ZeroDivisionError: 9 print("エラー:0で割り算しないでください") 10finally: 11 print("処理を終了します")

質問のコードではaに文字列等を入力した場合にもbの入力を求める処理を実行してしまい、NameError: name 'a' is not definedが発生します。

投稿2020/11/15 14:04

meg_

総合スコア10605

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

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

0

下のエラーが生じないように8行目でZeroDivisionErrorを指定したはずなのですが

ZeroDivisionErrorは実際に割り算を行った時点で発生しますので、入力だけtryを仕掛けても意味がありません。

投稿2020/11/15 13:59

maisumakun

総合スコア145208

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問