在阅读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而不是读取文件?
答案 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.