Godot: algún tipo de prueba finalmente (o excepto) bloque para gdscript

Creado en 30 ene. 2016  ·  13Comentarios  ·  Fuente: godotengine/godot

En Python se llama try excepto que en Java try catch finalmente. Ejecute el código dentro del bloque try si falla, ejecute el bloque finalmente en su lugar. Esto puede simplificar enormemente la codificación en el script gd al eliminar todos los bloqueos. Ya no tendrá que preocuparse por el código incorrecto. A veces, es posible que desee tener 1 código que funcione en un dato dinámico y no tener que crear más dispositivos de seguridad en caso de que diga que no hay datos.

TODOS los errores de un bloque de intento fallido siempre aparecerán en la ventana de depuración de todos modos (captura automática), por lo que incluso si no tiene que preocuparse, aún puede ver que su código es incorrecto.

tratar
... codifica aquí
finalmente
... codifica aquí

archived feature proposal gdscript

Comentario más útil

@ salvob41 en este caso puedes usar esto:

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

@Kotzuo , esto no siempre funciona, ya que no es determinista el flujo de ejecución. la función process es peligrosa

estás absolutamente, 100% correcto ... es un patrón peligroso

en el caso de hacer código de red, ¡son pantalones marrones! ¡La cosa a veces puede desconectarse entre obtener los códigos de estado de la conexión!

En GDScript, es un poco agotador esta defensa de otras personas que no tienen (o no creen tener) este problema ... y sugerirles que tal vez otras personas codifiquen con patrones diferentes. Tal vez esté codificando "bien" y mi manera es "incorrecta" ... no lo sé, pero he codificado con éxito de esta manera durante varios años y ahora obtener esta función no los obligaría a usarla, pero no tenerla. me obliga a codificar como ellos.

Si tenemos una declaración de prueba y captura, nadie tiene que usarla ... personas como yo y este tipo la quieren como una característica para que codifiquemos de la manera que nos gusta.

Todos 13 comentarios

Hmm, para mí prefiero fallas en mi programa sobre comportamientos extraños debido a un código incorrecto. Por favor no lo tomes
mal, me encantan las excepciones, cuando se hacen bien.

Creo que esto debería dejarse para la v2.1 para el nuevo script escrito estáticamente (¿mezclado con características "dinámicas" tal vez?).

Las excepciones no sucederán. Godot está diseñado para que las cosas sigan funcionando incluso
si el estado es inconsistente, mientras que al mismo tiempo reporta errores

El sábado 30 de enero de 2016 a las 8:18 a. M., RebelliousX [email protected]
escribió:

Mmmm, para mí prefiero fallas en mi programa sobre comportamientos extraños debido a malas
código. Por favor no lo tomes
mal, me encantan las excepciones, cuando se hacen bien.

Creo que esto debería dejarse para v2.1 para el nuevo estáticamente (mezclado con
¿características "dinámicas" tal vez?) guión mecanografiado.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177151923.

es una idea piénsalo. digamos, por ejemplo, que tiene un montón de imágenes en una carpeta, desea abrirlas todas como un conjunto de mosaicos, pero dice que no hay imágenes, no debería suceder nada. si bien puede parecer que simplemente puede verificar si hay nulo en la carpeta, su código es en realidad más simple en un bloque de prueba INTENTE hacerlo si no, eso es genial. todo el concepto de código pato es aún más código pato.

Además, incluso Python lo intenta, excepto que hace lo mismo que propongo, por lo que no es inaudito

sí, esto fue evaluado y considerado durante mucho tiempo, viendo pros vs contras.
no se agregarán excepciones

El sábado 30 de enero de 2016 a las 8:45 a. M., Trollworkout [email protected]
escribió:

es una idea piénsalo. digamos, por ejemplo, que tienes un montón de imágenes en una
carpeta, desea abrirlos todos como un conjunto de mosaicos, pero dice que no hay imágenes
no debería pasar nada. si bien puede parecer que simplemente puede verificar si hay nulo
en la carpeta su código es realmente más simple en un bloque de prueba INTENTE hacerlo si
eso no es genial. todo el concepto de código pato es aún más código pato.

Además, incluso Python lo intenta, excepto que hace lo mismo que propongo.
no es inaudito

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/godotengine/godot/issues/3516#issuecomment -177155429.

No hay problema :)

¿Nunca te ha pasado que verificas si el proceso de un nodo funciona si una instancia de un nodo es válida y luego falla porque "el índice no es válido para una instancia liberada anterior"?

Dado que el error no es determinista y podría hacer que el juego se bloquee inmediatamente (y eso es molesto, especialmente porque en un juego exportado no se informa en absoluto). Un intento, captura resolvería el error de una manera extremadamente limpia y sencilla.

¿Sigue siendo un no FIRME?

@ salvob41 en este caso puedes usar esto:

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

@ salvob41 en este caso puedes usar esto:

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

@Kotzuo , esto no siempre funciona, ya que no es determinista el flujo de ejecución. la función process es peligrosa

@ salvob41 en este caso puedes usar esto:

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

@Kotzuo , esto no siempre funciona, ya que no es determinista el flujo de ejecución. la función process es peligrosa

estás absolutamente, 100% correcto ... es un patrón peligroso

en el caso de hacer código de red, ¡son pantalones marrones! ¡La cosa a veces puede desconectarse entre obtener los códigos de estado de la conexión!

En GDScript, es un poco agotador esta defensa de otras personas que no tienen (o no creen tener) este problema ... y sugerirles que tal vez otras personas codifiquen con patrones diferentes. Tal vez esté codificando "bien" y mi manera es "incorrecta" ... no lo sé, pero he codificado con éxito de esta manera durante varios años y ahora obtener esta función no los obligaría a usarla, pero no tenerla. me obliga a codificar como ellos.

Si tenemos una declaración de prueba y captura, nadie tiene que usarla ... personas como yo y este tipo la quieren como una característica para que codifiquemos de la manera que nos gusta.

Es una decisión difícil. Pero, dado que godot no maneja los errores muy bien, podemos intentar ajustar cada retorno nulo / error en otro idioma que admita el manejo de errores de la manera que queremos.
Swift es una buena alternativa :

El manejo de errores en Swift se asemeja al manejo de excepciones en otros idiomas, con el uso de las palabras clave try, catch y throw. A diferencia del manejo de excepciones en muchos lenguajes, incluido Objective-C, el manejo de errores en Swift no implica deshacer la pila de llamadas, un proceso que puede ser computacionalmente costoso. Como tal, las características de rendimiento de una declaración throw son comparables a las de una declaración return.

No debería ser un problema si hay una forma de usar Swift. Soy un principiante en godot, y he oído que hay una forma de vincular otros idiomas de forma dinámica ...
Oh, otra buena noticia. En 2020, swift agregará soporte oficial para Windows.
Soy un novato total en este tema, pero podría haber una manera de obtener el manejo de errores sin mil declaraciones if y flujo lógico opcional.

sí, esto fue evaluado y considerado durante mucho tiempo, viendo pros vs contras.
no se agregarán excepciones

El sábado 30 de enero de 2016 a las 8:45 a. M., Trollworkout [email protected]
escribió:

es una idea piénsalo. digamos, por ejemplo, que tienes un montón de imágenes en una
carpeta, desea abrirlos todos como un conjunto de mosaicos, pero dice que no hay imágenes
no debería pasar nada. si bien puede parecer que simplemente puede verificar si hay nulo
en la carpeta su código es realmente más simple en un bloque de prueba INTENTE hacerlo si
eso no es genial. todo el concepto de código pato es aún más código pato.
Además, incluso Python lo intenta, excepto que hace lo mismo que propongo.
no es inaudito
-
Responda a este correo electrónico directamente o véalo en GitHub
# 3516 (comentario) .

Bueno, han pasado 4 años desde que comenzó (y terminó) este tema, y ​​todavía hay personas que enfrentan este problema (yo, por ejemplo). ¡Lo intenté ! = Null , is_instance_valid , no sirve de nada, porque el estado del nodo al que se hace referencia simplemente cambia entre la verificación de validez y la llamada al método de referencia. Intente ... atrapar ( excepto , lo que sea ) resolvería este problema en un segundo.

@reduz , vuelva a abrir esto.
Quiero manejar json para que no bloquee el editor cuando asigno un tipo no válido.
Godot no es algo que consideraría estable, me falla a diario debido a que gdscript no se escribe estáticamente

@ Shadowblitz16 Esto ya se ha discutido en profundidad, y ahora está claro que no se agregarán excepciones a GDScript. Si desea utilizar excepciones, utilice otro lenguaje que las admita, como C #.

¿Fue útil esta página
0 / 5 - 0 calificaciones