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

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不同)。

最佳答案

如果不使用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:
         .....

关于python - 在Python中,如何断言传入的文件对象是使用换行符=''打开的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30985523/

10-11 06:27