duff18
duff18

Reputation: 752

Mypy: got "function", expected "Callable[..., Any]"

import glob
from typing import Callable, List


def fun1(b: str) -> List[str]:
    return ["a", "b"] + [b]


def fun(a: str) -> Callable:
    return fun1 if a == "hello" else glob.glob

Running mypy on this file gives:

error: Incompatible return value type (got "function", expected "Callable[..., Any]")  [return-value]

but I thought a function was a Callable? This seems specific to glob.glob since if I simply return fun1 then the error goes away.

EDIT:

Opened an issue on github.

Upvotes: 7

Views: 3441

Answers (1)

hussic
hussic

Reputation: 1920

I think it is a mypy limit with if else ternary operator, this indeed seems to work:

import glob
from typing import Callable, List


def fun1(b: str) -> List[str]:
    return ["a", "b"] + [b]


def fun(a: str) -> Callable:
    if a == "hello":
        return fun1
    else:
        return glob.glob

Upvotes: 2

Related Questions