在Python中,如何使用newline =''打开传入的文件对象?

wal*_*rus 10 python python-3.x

我正在编写一个接收文件对象的函数,例如

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

我想在函数中做的第一件事就是确保传入的文件对象是用它打开的newline=''.我该怎么做呢?谢谢.

PS.我相信这个问题仅适用于Python 3,因为newline=''它只存在于Python 3中(注意它与默认值不同newline=None).

Pad*_*ham 1

如果不使用 ast 在运行时解析源代码,我认为从文件对象获取信息不会很容易或根本不可能,您可以确保换行符是None""通过读取一行然后检查换行符属性但我不确定该newlines 属性是否始终可用:

    next(f)
    if f.newlines is None:
        raise ValueError("...")
    else:
        f.seek(0)
Run Code Online (Sandbox Code Playgroud)

但是,如果您只能从带有文件名的函数接受文件对象并自己打开文件,这样您就可以控制:

def open_fle(f, mode="r"):
    with open(f, mode=mode,  newline="") as f:
         .....
Run Code Online (Sandbox Code Playgroud)