ursus contionabundo: Wer kann Exceptions noch explizit erklären? - 100€ Prämie! - Timeout/Deadline = 31.12.2019

Beitrag lesen

Hello,

Eine "Exception" ~= "Exitroutine" benötigt auch keine Klassen.

Völlig falsch! Eine Exception ist keine Exitroutine!

Die "Exception" an sich nicht - deren Behandlung (und, falls programmierbar und programmiert: Erkennung) aber schon.

Ich würde schon etwas wie exit(2) als "Exitroutine" bezeichnen - weil die syntaktische Ausgestaltung als Funktionaufruf (also: call) und die nachfolgenden (wenn auch aus Sicht eines Programmierers oft "unsichtbaren") Aktionen (Man denke an allein an den Garbage Collector!) nahelegen, dass es genau das ist.

Im Übrigen meldet sich jedes Programm beim Beenden an das OS zurück mit einem sogenannten Exitcode. Wobei ein Prozess beendet mit Exit-Code 255 heißt daß es per Exception beendet wurde. exit 0 hingegen ist (regelmäßig) ein fehlerfreier Return.

Eben der Elternprozess (dem der Exit des Kindes signalsiert wird) soll (kann) den Exit-Code auswerten.

Zutreffend ist, dass Programme für den Elternprozess (also nicht für das OS!) einen Exit-Status-Code hinterlassen und dass dieser, wenn es denn keine Null ist, signalisiert: Da ging was schief (Fatale Fehler) oder aber auch: vielleicht (Notizen, Warnungen) ging was schief. Was aber genau welcher Code (!=0) signalisiert ist Vereinbarungssache und soll sich an Konventionen - die durchaus sehr unterschiedlich sind - halten.

Das jetzt PHP (und Perl) als Interpreter eine 255 als exit-code hinterlassen wenn ein Syntaxfehler (compilation error) auftrat (Perl übrigens gerne eine 9 wenn es denn ein fehlendes Package vermutet oder eine Subroutine nicht definiert ist) ist z.B. eine solche Konvention.

Beispiele (Jeweils die letzte Zeile zeigt den Exit-Code):

$> echo -e "foo bar;" | perl; echo $?
Can't locate object method "foo" via package "bar" (perhaps you forgot to load "bar"?) at - line 1.
9
$> echo -e "foo bar(;" | perl; echo $?
syntax error at - line 1, near "(;"
Execution of - aborted due to compilation errors.
255
$> echo -e "<?php\nfoo();" | php; echo $?
PHP Fatal error:  Uncaught Error: Call to undefined function foo() in Standard input code:2
Stack trace:
#0 {main}
  thrown in Standard input code on line 2
255
$> echo -e "<?php\nfoo" | php; echo $?
PHP Parse error:  syntax error, unexpected end of file in Standard input code on line 3
255

Bei diesen Beispielen geht gar nichts schief. Aber der Elternprozess (Hier der Interpreter, der diesen Exit-Code an die Shell durchreicht.) bekommt eine 3 signalisiert:

$>  echo -e "exit(3);" | perl; echo $?
3
$> echo -e "<?php\nexit(3);" | php; echo $?
3

Dann wäre da noch der Umstand, dass die Ausgabe von Fehlermeldungen auf die Error-Konsole (stderr) erfolgen kann (Ausgaben im Beipiel unten unterdrückt). Klarer Fall von "Routine" - in dem Fall des Interpreters/Kompilers.

$> echo -e "<?php\nfoo();" | php 2> /dev/null; echo $?
255
0 59

Wer kann Exceptions noch explizit erklären? - 100€ Prämie! - Timeout/Deadline = 31.12.2019

TS
  • jobangebot
  • programmiertechnik
  • selfhtml-wiki
  1. 0
    ursus contionabundo
  2. 0
    Rolf B
    1. 0
      TS
      1. 0
        Camping_RIDER
        1. 0
          pl
          1. 0
            Camping_RIDER
            1. 0
              pl
              1. 0
                TS
                1. -1
                  pl
                  1. 1
                    ursus contionabundo
                    1. 0
                      pl
                      1. 1
                        ursus contionabundo
                    2. 0
                      pl
                      1. 0
                        ursus contionabundo
                        1. 0
                          pl
                          1. 0
                            ursus contionabundo
                  2. 0
                    Rolf B
                    1. 0
                      pl
                      1. 0
                        TS
                        1. 0
                          Rolf B
  3. 0
    Camping_RIDER
  4. 0
    pl
    1. 0
      JürgenB
      1. 0
        pl
    2. 0
      dedlfix
      1. 0
        ursus contionabundo
        1. 0
          dedlfix
          1. 0
            pl
          2. 0
            ursus contionabundo
            1. 1
              dedlfix
              1. 0
                ursus contionabundo
                1. 0
                  pl
                  1. 0
                    ursus contionabundo
                    1. 0
                      pl
                2. 0

                  Erklärbärwettbewerb zum Thema "Exceptions" läuft! Deadline ist der 31.12.2019.

                  TS
                  • programmiertechnik
                  • selfhtml-wiki
                  1. 0
                    pl
                  2. 0
                    Camping_RIDER
                  3. 1
                    1unitedpower
        2. 0
          beatovich
    3. 0
      Rolf B
      1. 0
        pl
  5. 0
    Rolf B
    1. 0

      Exceptions explizit erklären?: 100€ Prämie! Bitte denkt mal positiv!

      TS
      1. 0
        pl
        1. 0
          TS
          1. -1
            pl
            1. 0
              ursus contionabundo
              1. 0
                pl
                1. 0
                  Camping_RIDER
                  1. 4
                    Rolf B
                    1. 0
                      Camping_RIDER
                    2. 0
                      TS
                      • programmiertechnik
                      • projekt
                      • selfhtml-wiki
      2. 0
        Camping_RIDER
        1. 0
          TS
          1. 0
            Camping_RIDER
            1. 0
              TS
              • programmiertechnik
              • selfhtml-wiki
              1. 1
                Camping_RIDER
              2. 1
                ursus contionabundo