调用函数的函数;为什么这会返回NoneType而不是读取文件?

时间:2017-01-06 18:27:44

标签: python-2.7 file nonetype

在阅读Pydoc中的文件对象以及查看函数如何调用函数之后,我重写了Zed Shaw的一个LPTHW脚本,试图了解它是如何工作的。

以下是代码:

def open_file(f):
    open(f)

def read_file(f):
    f.read()

read_file(open_file('test.txt'))

这是错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in read_file
AttributeError: 'NoneType' object has no attribute 'read'

然而这很好用:

input_file = 'test.txt'

print open(input_file).read()

为什么调用函数版本的函数返回NoneType而不是读取文件?

2 个答案:

答案 0 :(得分:3)

您的open_file()函数实际上没有返回任何内容。你想要的是:

def open_file(f):
    return open(f)

在没有显式返回值的情况下到达其末尾的函数返回None,因此您获得异常,因为您的代码正在尝试执行read_file(None),而{I}又会尝试执行{{1} }}。 None.read()个对象没有None方法。

答案 1 :(得分:0)

以下是答案:

def open_file(f):
    return open(f)

def read_file(f):
    print f.read()

read_file(open_file('test.txt'))

这给出了输出:

Mary had a little lamb.
Its fleece was white as snow.
It was also very tasty.