google / google/python-fire

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

Open
#672 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
28.2k
Forks
1.5k
PR merge metrics
No merged PRs in 30d

Description

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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.