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



Solution 1:[1]

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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 hussic