Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden

Zusammenfassung

Der Unterschied besteht darin, ob "exit" als Ausnahme behandelt werden soll oder nicht.

PHP

Sie finden es in den Erläuterungen und Benutzerhinweisen zu exit.

PHP: exit - Manual

Beispiel 3 Ein Beispiel für die Ausführung einer Shutdown-Funktion oder eines Destruktors

>
<?php
class Foo
{
    public function __destruct()
    {
        echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL;
    }
}
>
function shutdown()
{
    echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL;
}
>
$foo = new Foo();
register_shutdown_function('shutdown');
>
exit();
echo 'Dies wird nicht ausgegeben.';
?>

Die Ausgabe des obigen Beispiels ist wie folgt.

 Shutdown: shutdown()
 Destruct: Foo::__destruct()

PHP: exit - Manual : User Contributed Notes

A side-note for the use of exit with finally: if you exit somewhere in a try block, the finally won't be executed. Could not sound obvious: for instance in Java you never issue an exit, at least a return in your controller; in PHP instead you could find yourself exiting from a controller method (e.g. in case you issue a redirect).

Here follows the POC:

<?php
echo "testing finally wit exit\n";
>
try {
    echo "In try, exiting\n";
>
    exit;
} catch(Exception $e) {
    echo "catched\n";
} finally {
    echo "in finally\n";
}
>
echo "In the end\n";
?>

This will print:

testing finally wit exit In try, exiting

Es gibt auch eine Möglichkeit, eine Ausnahme auszulösen, anstatt den Beendigungsprozess mit catch zu beenden und zu schreiben, aber es scheint, dass dies keine perfekte Alternative ist.

Natürlich habe ich versucht, es auf PHP7 auszuführen, aber das Ergebnis war das gleiche.

Python

Uchan Hinweis: Unterschiede zwischen Python exit (), sys.exit (), os._exit () Es ist ein Blick, wenn Sie es betrachten.

Mit Ausnahme von "os._exit ()" werden Ausnahmen ausgelöst, sodass "finally" ebenfalls relevant ist. Wenn gesagt wird, dass "os._exit ()" dem "exit ()" von PHP entspricht, sieht es etwas anders aus.

exit

4. Integrierte Konstanten - Python 2.7.x-Dokumentation

Ein Objekt, das eine Meldung wie "Verwenden Sie quit () oder Strg-D (dh EOF) zum Beenden" druckt, wenn es angezeigt wird, und beim Aufrufen einen "SystemExit" mit dem angegebenen Exit-Code sendet. ..

sys.exit()

[28.1.sys - Systemparameter und -funktionen - Python 2.7.x-Dokumentation]

Beenden Sie Python. Da exit () SystemExitsendet, ist es möglich, die Endverarbeitung in derfinally -Klausel der try-Anweisung zu beschreiben oder eine Ausnahme auf einer höheren Ebene abzufangen und die exit`-Verarbeitung zu unterbrechen. Ich kann es schaffen (Weggelassen) Letztendlich löst "exit ()" "nur" eine Ausnahme aus. Wenn es also vom Hauptthread aufgerufen wird, wird der Prozess nur beendet und die Ausnahme nicht blockiert.

6. Integrierte Ausnahmen - Python 2.7.x-Dokumentation

Diese Ausnahme wird von der Funktion sys.exit () ausgelöst. Wenn diese Ausnahme nicht behandelt wird, wird der Python-Interpreter beendet, ohne dass ein Stack-Traceback angezeigt wird. Wenn der zugehörige Wert eine reguläre Ganzzahl ist, stellt er den Exit-Status dar (an die Funktion exit () übergeben). Wenn der Wert None ist, ist der Exit-Status 0. Bei anderen Typen (z. B. Zeichenfolgen) wird der Wert dieses Objekts angezeigt und der Beendigungsstatus ist 1.

Die Instanz dieser Ausnahme hat den Attributcode. Dieser Wert wird auf den Exit-Status oder die Fehlermeldung gesetzt (standardmäßig Keine). Außerdem ist diese Ausnahme nicht unbedingt ein Fehler, sodass sie von BaseException anstelle von StandardError abgeleitet wird.

sys.exit () stellt sicher, dass die Bereinigungsverarbeitung (die finally-Klausel der try-Anweisung) ausgeführt wird und dass das Skript ausgeführt werden kann, ohne dass das Risiko besteht, dass der Debugger außer Kontrolle gerät. In Ausnahmen übersetzt. Sie können die Funktion os._exit () verwenden, wenn dringend eine sofortige Beendigung erforderlich ist (z. B. in einem untergeordneten Prozess nach dem Aufruf von fork ()).

Diese Ausnahme erbt von BaseException und nicht von StandardError oder Exception, damit der Code, der die Exception abfängt, sie nicht versehentlich abfängt. Dadurch wird diese Ausnahme stetig an den Anrufer weitergegeben und der Interpreter beendet.

In Version 2.5 geändert: Geändert, um BaseException zu erben.

Genau! nicht wahr.

os._exit()

15.1. Os - Verschiedene Betriebssystemschnittstellen - Python 2.7.x-Dokumentation

Beenden Sie den Vorgang mit dem Beendigungsstatus n. Zu diesem Zeitpunkt wird der Bereinigungshandler nicht aufgerufen und der Standardeingabe- / Ausgabepuffer wird nicht geleert.

Zum Thema passende Artikel

Aus dem gleichen Blog.

Es ist ein Übergang von der Ära ohne "endlich" zur Ära nach der Implementierung. In Kombination mit der Operation "Exit" dieses Mal habe ich das Gefühl, dass der Destruktor wieder erkannt wurde.

Recommended Posts

Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
[Python] Unterschied zwischen Klassenmethode und statischer Methode
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Zusammenfassung der Unterschiede zwischen PHP und Python
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen return, return None und no return description in Python
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Python> Unterschied zwischen Inpbt- und Print-Ausgabe (Inpbt)> [1. 2. 3.] / Array ([1., 2., 3.], dtype = float32)
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Zusammenarbeit zwischen Python-Modul und API
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen Python, Stftime und Strptime
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen SQLAlchemy flush () und commit ()
Python / Numpy> Link> Unterschied zwischen numpy.random und random.random> threadsicher oder nicht
Zusammenfassung der Unterschiede zwischen Python und PHP (Vergleichstabelle der Hauptelemente)
Funktion zum Öffnen einer Datei in Python3 (Unterschied zwischen open und codecs.open und Geschwindigkeitsvergleich)
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Unterschied in der Authentizität zwischen Python und JavaScript
Vermeiden Sie verschachtelte Schleifen in PHP und Python
Unterschiede zwischen Ruby und Python im Umfang
[Xg Boost] Unterschied zwischen Softmax und Softprob
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Grundlegende Grammatik] Unterschiede zwischen Ruby / Python / PHP
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
[Python3] Wechseln Sie zwischen Shift_JIS, UTF-8 und ASCII
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschiede in der Multithread-Verarbeitung zwischen Python und Jython
Unterschied zwischen Ruby und Python (grundlegende Syntax)
Unterschied zwischen numpy.ndarray und list (Dimension, Größe)
Korrespondenz zwischen den in Python integrierten Funktionen und Rust
Unterschied zwischen ls -l und cat Befehl
Kommunikation verschlüsselter Daten zwischen Python und C #