Uncaught exception when a component has a property whose getter raises (intended?)
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 58/100
Rechercherichtung
Beginne mit dem bereitgestellten app.py-Reproducer und verfolge den Pfad zur Aufzählung der Member, der vom Aufruf ohne Argumente und von --help verwendet wird. Vergleiche diesen Pfad mit dem direkten greet-Aufruf und füge anschließend Abdeckung für eine Property hinzu, die eine Exception auslöst; fertig ist die Aufgabe, wenn help und der Aufruf ohne Argumente den Getter-Fehler entsprechend dem gewählten Verhalten behandeln, während greet weiterhin funktioniert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- Python
- Sterne
- 28.2k
- Forks
- 1.5k
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus google/python-fire
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
google/python-fire#693 ·
-
Release 0.7.2? Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 38/100
google/python-fire#698 ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 45/100
google/python-fire#665 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
google/python-fire#659 · 1 Kommentar ·
-
Releasing 3.14 Support Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
google/python-fire#643 · 4 Kommentare · 5 Reaktionen ·
Alle Issues in google/python-fire
Ähnliche Issues
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
use-agent-os/agent-os#3314 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
BasedHardware/omi#15662 · 1 Kommentar ·
-
documentation help wanted
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
AiursoftWeb/AnduinOS-2#19 ·