• 締切済み

pythonZeroDivisionError例外

asciizの回答

  • asciiz
  • ベストアンサー率70% (6662/9445)
回答No.1

>下記はAIによる説明です >「第二引数」でexceptionとなるのはわかりますが、 >「第一引数に対しては、ZeroDivisionErrorは送出されません」 >とあります AIによるデタラメ回答ですので、理由を考えること自体が不合理です。 AIはそのように、もっともらしく嘘をつくことがよくあるので、AI回答をもらっても「本当にそうであるかどうか?」と検討しなければいけません。 これはプログラマであるかどうかに関係なく、日常すべてにおいて通じる話です。 鵜呑みにしていたら騙されるため、自分で考える癖を付けなければなりません。 >2)出力が >Error: division by zero >となる理屈 数学的に、0による除算の結果は「不定」となります。 しかしコンピュータ的に、「不定」という演算結果を、変数に入る具体的な数値にはできないので、「0除算エラー」という例外(exception)を発生する仕掛けになっています。 もっともご質問のプログラムでは、「try」構文により、わざわざ「エラーが発生した場合」を検出するようにしているから、「Error: division by zero」がprintによって表示されます。 try構文が無かった場合、python本来のエラー表示となります。 例えば、 a = 5 b = 0 c = a / b print(c) というプログラムを実行すると、 >C:\temp>python DivZero.py >Traceback (most recent call last): > File "C:\_Win7\Desktop\OKWave\DivZero.py", line 3, in <module> > c = a / b > ~~^~~ >ZeroDivisionError: division by zero このように実行時エラーが出て止まります。 「print(c)」は実行されません。

ketae
質問者

お礼

ありがとうございます わたしは書いたように「解」をもとめて投稿しています 1)は、第一、第三、など他の位置変数でもexceptionを検知するのか、という質問です 2)は、どうして(どういうロジックで) 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