python-fire icon indicating copy to clipboard operation
python-fire copied to clipboard

Raising FireError in __init__ is not handled properly

Open mnowotnik opened this issue 4 years ago • 4 comments

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

mnowotnik avatar Apr 26 '20 18:04 mnowotnik

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.

iGieri avatar May 03 '20 18:05 iGieri

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.

iGieri avatar May 04 '20 18:05 iGieri

@joejoevictor is also taking a look at this

dbieber avatar May 04 '20 21:05 dbieber

Any updates on this issue? cc: @joejoevictor

aksg87 avatar Sep 23 '21 21:09 aksg87