Uncaught exception when a component has a property whose getter raises (intended?)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 58/100
Línea de trabajo
Comienza con el reproductor app.py proporcionado y sigue la ruta de enumeración de miembros utilizada por la invocación sin argumentos y por --help. Compara esa ruta con la llamada directa a greet y, después, añade cobertura para una propiedad que lanza una excepción; se considera terminado cuando help y la invocación sin argumentos gestionan el fallo del getter según el comportamiento elegido, mientras greet sigue funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When a component has a @property whose getter raises, fire.Fire(component) crashes with the property's raw traceback on bare invocation and on --help, instead of showing usage/help. A direct call to an unrelated method works fine.
Repro (fire 0.7.1):
import fire
class App:
@property
def status(self):
raise RuntimeError("backend unavailable") # e.g. a lazy / fallible getter
def greet(self, who="world"):
return f"hi {who}"
if __name__ == "__main__":
fire.Fire(App())
$ python app.py --help
...
value = getter(object, key)
File "app.py", line 5, in status
raise RuntimeError("backend unavailable")
RuntimeError: backend unavailable
$ python app.py greet # works
hi world
Fire enumerates members (and reads property values) during help/listing, so any property getter that can raise (lazy config, DB or network access, etc.) takes down --help and bare invocation, even though those properties are never invoked.
Is this intended, or should Fire surface a clean error (or skip properties that raise) during member enumeration? Happy to send a PR if a fix would be welcome.
Found via automated analysis and confirmed with the reproducer above on fire 0.7.1.
- Lenguaje dominante
- Python
- Estrellas
- 28.2k
- Forks
- 1.5k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de google/python-fire
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
google/python-fire#693 ·
-
Release 0.7.2? Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 38/100
google/python-fire#698 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
google/python-fire#665 · 2 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
google/python-fire#659 · 1 comentario ·
-
Releasing 3.14 Support Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
google/python-fire#643 · 4 comentarios · 5 reacciones ·
Todos los issues de google/python-fire
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
use-agent-os/agent-os#3314 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
BasedHardware/omi#15662 · 1 comentario ·
-
documentation help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
AiursoftWeb/AnduinOS-2#19 ·