2017-01-06 10 views
0

関数が関数を呼び出す方法を見るだけでなく、Pydocのファイルオブジェクトについても読んだ後、Ze ShawのLPTHWスクリプトの1つを書き直して、その動作を理解しようとしました。ここで関数を呼び出す関数。なぜ、これはファイルを読むのではなく、NoneTypeを返しますか?

はコードです:

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を返しますか?

答えて

3

open_file()関数は実際に何も返しません。何が欲しいのです:あなたはあなたのコードが順番にNone.read()を実行しようとread_file(None)を実行しようとしているので、例外を取得しているので、明示的に値を返さずに、その末尾に達する

def open_file(f): 
    return open(f) 

機能は、Noneを返します。 Noneオブジェクトにはread()メソッドがありません。

def open_file(f): 
    return open(f) 

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

read_file(open_file('test.txt')) 

の出力できます:ここで

+1

を。それは時々私を得る最も簡単なものです。 –

0

は答えである私が今理解

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

好奇心がなぜ受け入れられた答えの変更。回答者には、エラーの内容と、それが原因で観察された動作の原因が説明されていることが奨励されます。 – glibdud

+0

私の理解では、ポスターは可能な限り自分で答えを出すことも奨励されています。あるいは私は誤解していますか?決して意味がありません。 –

+0

あなた自身の質問に答えるのに間違ってはいませんが、あなたの答えを上に浮かべたり、評判を与えたりすることはないので、他の回答や他の回答がない限り、真剣に欠けている。他の回答*が不足している場合、追加情報を要求するコメントは良い第一歩です。 – glibdud

関連する問題