• 締切済み

pythonZeroDivisionError例外

cametan_42の回答

回答No.2

ん? いや、AIが書いてる通りでしょ。 そもそも第一引数、とか第二引数、って表現が良くない。 単純に 5/0 は計算出来ない。だから例外が送出されてる、ってそれだけの話なんだけど。 仮に、 try: a = 0 b = 5 c = a / b except ZeroDivisionError as e: print(f"Error: {e}") ってコードなら例外は出ない。0は5で割れるから、だ。 単に除数が0の時には「計算が出来ない」からZeroDivisionErrorが送出される、と。 それだけの話だ。 ちなみに、Pythonにはoperatorと言うモジュールがあって、「第一引数」「第二引数」ってのは次の形式(つまり/演算子の本体)で記述した時に生じてます。 import operator as op try: a = 5 b = 0 c = op.truediv(a, b) except ZeroDivisionError as e: print(f"Error: {e}") つまり、/演算子の本体がこのoperator.truedivと言う「関数」で、a(第一引数)が被除数、b(第二引数)が除数になってて、bが0だったら「割り算が出来ませんよ」と言う当たり前の事を言ってるわけ。

ketae
質問者

お礼

ありがとうございます では、第一、第二という位置は意味をもっておらず、計算できないから0の例外処理が実行されたという認識で合っていますか? また Error: division by zero という「文字の並び」が出た理由、ロジック、がわからないという質問です

関連するQ&A

  • phpの例外処理がエラーをトラップしてくれない。

    以下のように例外処理を記述しした場合、 try{ //ここでエラー } catch (Exception $e){ $ErrorMsg="その他エラー:".$e->getMessage(); } tryの中で、0除算によるエラーが発生してもエラーをトラップして、例外 処理のcatchに飛びません。 どのように記述すればエラーをトラップできるのでしょか?

    • ベストアンサー
    • PHP
  • PHPの例外処理

    PHPの例外処理について教えてください function test() {   try{    $a = 10;    $b = 0;    $result = $a/$b;   }   catch(Exception $e){    //エラー処理   } } 上記でcatchが実行されるためにはどのようにすれば良いでしょうか?例えば if($b == 0) {   throw new Exception('例外'); } を「$result = $a/$b;」の前に書いておくなどすればcatchされるのはわかりますが、 想定されるすべての例外のthrow処理を記載するなんてことはしたくありません。 実行してエラーだったら自動的にthrowされる、なんていうことはPHPでは無理でしょうか?

    • ベストアンサー
    • PHP
  • 1行での計算について

    1行で以下の計算を行うには、どの言語がいいのでしょうか? perlで以下を試しましたが、ゼロ除算の為エラーになります。 やりたい計算 答え  = 5 / 134657 * 100 $ perl -e 'print 5 / 134657 * 100' 上記ですと、0.00371313782424976と表示されますが、これに変数を代入するとエラーになります。 % vi test.sh #!/bin/sh a=5 b=134657 answer=`perl -e 'print $a / $b * 100'` echo "answer = $answer" $ sh test.sh Illegal division by zero at -e line 1. 以上宜しくお願いします。

  • あらゆる例外に対応できるエラーハンドラ

    接続できなかったら例外発生、値がなかったら例外発生というのではなく、あらゆる例外に対応できるエラーハンドラって、書けないものでしょうか? error_log関数を使えば、簡単にファイルに書き込めますが、文章を自分で考えなくてはなりません。 error_log("エラーが発生しました",3,"err.log"); そうではなく、ゼロで除算すれば、ブラウザに、Warning: Division by zero in ~というのが表示される ので、このようなエラーメッセージをログに書き込むなり、メールで送信したいところです。 エラーハンドラの典型的な書き方や、とりあえず、これだけ書いとけ! というものはありませんか?

    • ベストアンサー
    • PHP
  • ゼロ除算

    CSSすら理解してない私が見よう見まねでphpを使ってみたのですが、エラーが起こって困ってます。 Warning: Division by zero <?php $a = $_POST["a"]; $b = $_POST["b"]; $c = $a + $b; $d = $a / $c; $e = $d *5; echo $e; ?> <form action="test.php" method="post"> <input type="text" name="a"> <input type="text" name="b"> <input type="submit" name="bottun1" value="計算"> </form> 自己流で勝手に書いたので変なことになっていると思います。 エラーの原因は「$d = $a / $c;」でしょうか? 調べてみたら、どうやらゼロ除算というのが問題らしいです。 どうすれば解決できるでしょうか? それともしよろしければ、この様な計算をする場合の正しい書き方を教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 例外処理と、ハンドルする範囲

    Try Catchや、throws Exceptionを使うべき時についてです。 ・0除算がありうるとき ・DLLや外部EXEを使用するとき、そっちの世界でのエラーをハンドルするとき ・ネットワークエラーや、DBサーバでのエラーをハンドルするとき ・ディレクトリがないとき・ファイルがないとき ・リフレクション?で、型判定・キャストを使用するときに、意図しない型のクラスが渡されてきた場合 などは、ハンドリングしつつ、それ用のエラーページにてエラーを表示しようと思いますが、 (1)みなさんはどのようなものまでハンドリングしていますか? 自分は、 Catch ex As System.xxx.xxxxxxException を何種類も書くメリットが感じられないので、 catch (System.Exception ex) で、上のもの以外のエラーについて、ex.Messageを出力しています。 (2)例外があったとき、エラーページに飛ばさずに、呼び元に扱いを任せる場合は(throwsさせる場合)どう使い分けをしていますか? (3)呼び出された側のクラスの、catch (Exception e)のブロックの中で、エラーページに飛ばしていますか?それとも、一番最初の呼び出し元まで、throws→throws→throws...して、一番最初の呼び出し元からエラーページに飛ばしていますか? .

  • 継承クラスで定義したメソッドのtry-catch文

    親クラスで、子クラスで実装されたメソッドのExceptionをキャッチしたいのですが、 うまくいきません。 何か良い方法はないでしょうか? abstract class A { public __construct(){ try{ $this->testA(); }catch(Exception $e){ var_dump(1); } } abstract function testA(); } class B extends A { function testA(){ throw Exception('test',1); } } try{ new B; }catch(Exception $e){ var_dump(2); // こっちが動く } よろしくお願いします。

    • ベストアンサー
    • PHP
  • try~catch

    php初心者です try~catchをわかりやすく教えてください throw new Exceptionが出現したら、catchまでの処理をしないでとばすとゆうことですか? try~catchを抜けたら、他の処理は普通に実行されるのでしょうか? try~catchのカッコ{で囲む範囲は大きくしたほうがいいでしょうか?(大きく囲むと処理スピードおそくなりますか?) try { throw new Exception('エラーが発生しました');  print "hoge"; } catch (Exception $e) {  echo '例外発生', $e->getMessage(), "\n"; }  print "foo"; よろしくお願いします

    • ベストアンサー
    • PHP
  • どの例外でcatchすればいいのですか?

    例外の使い方を理解できていません。 さっき検索してみて下の質問と回答を見つけました。 例外処理がまったくわかりません!! http://www.okweb.ne.jp/kotaeru.php3?q=704380 この中の#2さんの回答、 >    catch (FileNotFoundException e){ ・・・ } >     catch (IOException e){ ・・・ } >   などと分けて書かなくとも、 >     catch (Exception e){ ・・・ } >   と書けば、すべての例外を処理できます。 を読むと「それなら、どんな例外でもすべて"(Exception e)"でcatchすればいいじゃん」と思うのですが駄目ですか? もし駄目ならどんな基準でExceptionを選んでいるのですか? 例えば、下のような二分検索木への挿入メソッドの場合、 どこでどのような例外を使ってcatchすればいいのですか? 私の思うような例外を入れてみましたが、どんなエラーが出るかも分からないし…。 だからと言ってthrow ~ catchを入れないとJBuilderが怒るんですよね…。 public void insert(int el) { IntBSTNode p = root, prev = null; try { while (p != null) { prev = p; if (p.key < el) p = p.right; else p = p.left; } if (root == null) root = new IntBSTNode(el); else if (prev.key < el) prev.right = new IntBSTNode(el); else prev.left = new IntBSTNode(el); } catch (Exception x) { System.out.println("エラーだ! 何か表示"); } } 分かる方、説明をお願いします。

    • ベストアンサー
    • Java
  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java