Uncaught exception when a component has a property whose getter raises (intended?)

Author: LougarouCreated Jun 6, 2026Updated Jun 23, 2026

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):

python
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.