def get_fno(obj):
    """
    Try to get the best fileno of a obj:
        * If the obj is a integer, it return that integer.
        * If the obj has a fileno method, it return that function call.
    """
    if obj is None:
        return None
    elif isinstance(obj, int):
        return obj
    elif hasattr(obj, "fileno") and callable(getattr(obj, "fileno")):
        return obj.fileno()

    raise TypeError("Expected None, int or fileobject with fileno method")