python-fire
python-fire copied to clipboard
Raising FireError in __init__ is not handled properly
In version 0.3.1 when user attempts to raise error in the __init__ method the effective error that gets printed is about missing self argument. Minimal example:
import fire
from fire.core import FireError
class Calc:
def __init__(self):
raise FireError('foo')
def add(self):
pass
if __name__ == "__main__":
fire.Fire(Calc)
python calc.py add
ERROR: The function received no value for the required argument: self
When executed interactively, the error is correct:
>>>import calc; import fire
>>>fire.Fire(calc.Calc)
ERROR: foo
I've the same error with the same version. I'm trying to debug core.py because the problem is in this file. I'll let you know if I found something.
Today I've tried to create something like a filter in the _ParseArgs() function (core.py). This filter check if there is the keyword "self" in fn_args and the component is a class, so it remove "self" from fn_args and append it to fn_defaults (to do this I've converted fn_defaults to a list, I've appended "self" and I've reconverted it in a tuple), but this doesn't work. Tomorrow I'll try to find other solutions.
@joejoevictor is also taking a look at this
Any updates on this issue? cc: @joejoevictor