Подтвердить что ты не робот

В Python, как утверждать, что переданный файловый объект был открыт с помощью newline = ''?

Я пишу функцию, которая принимает объект файла, например.

def my_fn(file_obj):
    assert <what expression here?>, "file_obj must be opened with newline=''."
    ...

Первое, что я хочу сделать в этой функции, - убедиться, что файл переданного файла был открыт с помощью newline=''. Как мне это сделать? Спасибо.

PS. Я считаю, что этот вопрос применим только к Python 3, потому что newline='' существует только в Python 3 (обратите внимание, что он отличается от стандартного newline=None).

4b9b3361

Ответ 1

Без разбора источника во время выполнения с помощью ast я не думаю, что будет легко или возможно вообще получить информацию из файлового объекта, вы могли бы убедиться, что новая строка была None или "" читая строку, проверяя атрибут newlines, но я не уверен, что атрибут newlines всегда будет доступен:

    next(f)
    if f.newlines is None:
        raise ValueError("...")
    else:
        f.seek(0)

Но если вы можете только принять файл-объект из функции, которая принимает имя файла, и открыть файл самостоятельно, чтобы вы могли контролировать:

def open_fle(f, mode="r"):
    with open(f, mode=mode,  newline="") as f:
         .....