Godot: irgendeine Art von Versuch endlich (oder außer) Block für gdscript

Erstellt am 30. Jan. 2016  ·  13Kommentare  ·  Quelle: godotengine/godot

In Python heißt try außer in Java try catch finally. Führen Sie den Code im try-Block aus, wenn er fehlschlägt, führen Sie stattdessen den finally-Block aus. Dies kann die Codierung im gd-Skript erheblich vereinfachen, indem alle Abstürze beseitigt werden. Sie müssen sich keine Sorgen mehr über schlechten Code machen. Manchmal möchten Sie vielleicht, dass 1 Code an einem dynamischen Datenelement arbeitet und keine zusätzlichen Failsafes erstellen müssen, falls keine Daten vorhanden sind.

ALLE Fehler von einem fehlgeschlagenen Try-Block werden sowieso immer im Debug-Fenster angezeigt (automatischer Fang), sodass Sie, selbst wenn Sie sich keine Sorgen machen müssen, sehen können, dass Ihr Code fehlerhaft ist.

Versuchen
... hier codieren
Endlich
... hier codieren

archived feature proposal gdscript

Hilfreichster Kommentar

@salvob41 in diesem Fall können Sie dies verwenden:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , dies funktioniert nicht immer, da der Ausführungsfluss nicht deterministisch ist. die process Funktion ist gefährlich

du hast absolut 100% recht...... es ist ein gefährliches Muster

im Fall von Netzwerkcode ist es jedoch eine braune Hose! das Ding kann manchmal zwischen dem Abrufen der Verbindungsstatuscodes trennen!

Es ist ein wenig ermüdend in GDScript diese Abwehr anderer Leute, die dieses Problem nicht haben (oder glauben, nicht zu haben) .... und ihnen vorzuschlagen, vielleicht andere Leute mit anderen Mustern zu programmieren. Vielleicht kodierst du "richtig" und mein Weg ist "falsch".... ich weiß nicht, aber ich habe mehrere Jahre erfolgreich auf diese Weise kodiert und jetzt würde sie diese Funktion nicht zwingen, sie zu verwenden, aber sie nicht zu haben zwingt mich, wie sie zu codieren.

Wenn wir eine try-and-catch-Anweisung haben, muss sie niemand benutzen

Alle 13 Kommentare

Hmm, für mich bevorzuge ich Abstürze in meinem Programm gegenüber seltsamen Verhaltensweisen aufgrund von schlechtem Code. Bitte nimm es nicht
falsch, ich liebe Ausnahmen, wenn sie richtig gemacht werden.

Ich glaube, dies sollte für v2.1 für das neue statisch (vielleicht gemischt mit "dynamischen" Funktionen?) typisierte Skript bleiben.

Ausnahmen werden nicht passieren. Godot ist dafür gemacht, dass die Dinge auch weiterhin funktionieren
wenn der Zustand inkonsistent ist, während gleichzeitig Fehler gemeldet werden

Am Samstag, 30. Januar 2016 um 8:18 Uhr, RebelliousX [email protected]
schrieb:

Hmm, für mich bevorzuge ich Abstürze in meinem Programm gegenüber seltsamen Verhaltensweisen aufgrund von Fehlern
Code. Bitte nimm es nicht
falsch, ich liebe Ausnahmen, wenn sie richtig gemacht werden.

Ich glaube, dies sollte für v2.1 für die neue statisch bleiben (gemischt mit
"dynamische" Funktionen vielleicht?) typisiertes Skript.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/godotengine/godot/issues/3516#issuecomment -177151923.

ist eine Idee, darüber nachzudenken. Angenommen, Sie haben eine Reihe von Bildern in einem Ordner, die Sie alle als Tileset öffnen möchten, aber sagen, es sind keine Bilder vorhanden, es sollte nichts passieren. Während es so aussehen mag, als könnten Sie einfach im Ordner nach null suchen, ist Ihr Code in einem try-Block tatsächlich einfacher. Das ganze Konzept des Duck-Codes ist noch mehr Duck-Code.

Plus sogar Python hat es versucht, außer dass es das Gleiche tut, was ich vorschlage, also ist es nicht unbekannt

Ja, dies wurde lange Zeit bewertet und in Betracht gezogen, wobei Vor- und Nachteile gesehen wurden.
Ausnahmen werden nicht hinzugefügt

Am Sa, 30. Januar 2016 um 8:45 Uhr, trollworkout [email protected]
schrieb:

ist eine Idee, darüber nachzudenken. sagen Sie zum Beispiel, Sie haben eine Reihe von Bildern in a
Ordner, den Sie alle als Tileset öffnen möchten, aber sagen, es sind keine Bilder vorhanden
nichts sollte passieren. obwohl es so aussehen mag, als könnten Sie einfach nach null suchen
in dem Ordner ist Ihr Code in einem Try-Block tatsächlich einfacher, VERSUCHEN Sie es, wenn
nicht das ist cool. Das ganze Konzept des Duck-Codes ist noch mehr Duck-Code.

Plus sogar Python hat es versucht, außer dass es das Gleiche tut, was ich vorschlage
ist nicht unbekannt


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/godotengine/godot/issues/3516#issuecomment -177155429.

Kein Problem :)

Ist Ihnen noch nie passiert, dass Sie überprüfen, ob die Prozessfunktion eines Knotens gültig ist, wenn eine Instanz eines Knotens gültig ist und dann fehlschlägt, weil "Index für eine vorherige freigegebene Instanz nicht gültig ist"?

Da ist der Fehler nicht deterministisch und könnte das Spiel sofort zum Absturz bringen (und das ist ärgerlich, vor allem weil bei einem exportierten Spiel das gar nicht gemeldet wird). Ein Versuch, Fangen würde den Fehler auf eine extrem saubere und einfache Weise beheben.

Ist das immer noch eine FIRMA-Nr.

@salvob41 in diesem Fall können Sie dies verwenden:

if is_instance_valid(object):
    #Do what you want if the node exists

@salvob41 in diesem Fall können Sie dies verwenden:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , dies funktioniert nicht immer, da der Ausführungsfluss nicht deterministisch ist. die process Funktion ist gefährlich

@salvob41 in diesem Fall können Sie dies verwenden:

if is_instance_valid(object):
    #Do what you want if the node exists

@Kotzuo , dies funktioniert nicht immer, da der Ausführungsfluss nicht deterministisch ist. die process Funktion ist gefährlich

du hast absolut 100% recht...... es ist ein gefährliches Muster

im Fall von Netzwerkcode ist es jedoch eine braune Hose! das Ding kann manchmal zwischen dem Abrufen der Verbindungsstatuscodes trennen!

Es ist ein wenig ermüdend in GDScript diese Abwehr anderer Leute, die dieses Problem nicht haben (oder glauben, nicht zu haben) .... und ihnen vorzuschlagen, vielleicht andere Leute mit anderen Mustern zu programmieren. Vielleicht kodierst du "richtig" und mein Weg ist "falsch".... ich weiß nicht, aber ich habe mehrere Jahre erfolgreich auf diese Weise kodiert und jetzt würde sie diese Funktion nicht zwingen, sie zu verwenden, aber sie nicht zu haben zwingt mich, wie sie zu codieren.

Wenn wir eine try-and-catch-Anweisung haben, muss sie niemand benutzen

Es ist eine schwere Entscheidung. Da Godot Fehler jedoch nicht sehr gut handhabt, können wir versuchen, jede einzelne Null-/Fehler-Rückgabe in eine andere Sprache zu verpacken, die die Fehlerbehandlung so unterstützt, wie wir es wollen.
Swift ist eine gute Alternative :

Die Fehlerbehandlung in Swift ähnelt der Ausnahmebehandlung in anderen Sprachen, wobei die Schlüsselwörter try, catch und throw verwendet werden. Im Gegensatz zur Ausnahmebehandlung in vielen Sprachen – einschließlich Objective-C – umfasst die Fehlerbehandlung in Swift kein Abwickeln des Aufrufstapels, ein Vorgang, der rechenintensiv sein kann. Daher sind die Leistungsmerkmale einer throw-Anweisung mit denen einer return-Anweisung vergleichbar.

Es sollte kein Problem sein, wenn es eine Möglichkeit gibt, Swift zu verwenden. Ich bin ein Anfänger in Godot und habe gehört, dass es eine Möglichkeit gibt, andere Sprachen dynamisch zu verknüpfen...
Oh, noch eine gute Nachricht. Im Jahr 2020 wird Swift offizielle Unterstützung für Windows hinzufügen.
Ich bin ein absoluter Neuling in diesem Thema, aber es könnte eine Möglichkeit für uns geben, eine Fehlerbehandlung ohne 1000 if-Anweisungen und optionalen Logikfluss zu erreichen.

Ja, dies wurde lange Zeit bewertet und in Betracht gezogen, wobei Vor- und Nachteile gesehen wurden.
Ausnahmen werden nicht hinzugefügt

Am Sa, 30. Januar 2016 um 8:45 Uhr, trollworkout [email protected]
schrieb:

ist eine Idee, darüber nachzudenken. sagen Sie zum Beispiel, Sie haben eine Reihe von Bildern in a
Ordner, den Sie alle als Tileset öffnen möchten, aber sagen, es sind keine Bilder vorhanden
nichts sollte passieren. obwohl es so aussehen mag, als könnten Sie einfach nach null suchen
in dem Ordner ist Ihr Code in einem Try-Block tatsächlich einfacher, VERSUCHEN Sie es, wenn
nicht das ist cool. Das ganze Konzept des Duck-Codes ist noch mehr Duck-Code.
Plus sogar Python hat es versucht, außer dass es das Gleiche tut, was ich vorschlage
ist nicht unbekannt

Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
#3516 (Kommentar) .

Nun, es ist 4 Jahre her, dass dieses Thema begann (und endete), und es gibt immer noch Leute, die mit diesem Problem konfrontiert sind (ich zum Beispiel). Ich habe versucht != null , schwachrefs , is_instance_valid , es Versuchen Sie .. catch ( außer , was auch immer ) würde dieses Problem in einer Sekunde lösen.

@reduz bitte
Ich möchte mit json umgehen, damit der Editor nicht abstürzt, wenn ich einen ungültigen Typ zuweisen.
Godot ist nichts, was ich als stabil bezeichnen würde, es stürzt täglich bei mir ab, weil gdscript nicht statisch getippt wird

@Shadowblitz16 Dies wurde bereits ausführlich besprochen und es ist inzwischen klar, dass GDScript keine Ausnahmen hinzugefügt werden. Wenn Sie Ausnahmen verwenden möchten, verwenden Sie eine andere Sprache, die diese unterstützt, z. B. C#.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen