2017-08-08 6 views
-1
g = None 
try: 
    g = open("mydata.txt", "r") 
except IOError: 
    print(’Python could not open the file mydata.txt.’) 
if g: 
    try: 
     lines = g.readlines() 
     print("The list of lines is:") 
     print(lines) 
    except IOError: 
     print(’Error while trying to read the data in the file.’) 

これは、私の教科書からPythonでtryexceptを使用した例です。教科書には、「gNoneifステートメントの論理コンテキスト内でFalseと扱われる)の初期バインディングが与えられていると述べています。私の理解から、gは既にopen関数から返されたファイルオブジェクトを保持していますが、ifステートメントのブール値コンテキスト内でFalseとしてどのように扱うことができますか?それは、一度「2つのオブジェクトを持っていない」2つのオブジェクトにどのように変数を割り当てることができますか?

g = open("mydata.txt", "r") 

:時に再割り当てされますと、ファイルオブジェクトへNoneを保持しているから

答えて

0

再割り当てしません考えられるのは、open()が失敗し、最初のExceptブロックがヒットした場合は、g will still be equal toなしです。

したがって、open()プロセスが正常に完了した場合、if gステートメントはtrueと評価され、機能は続行されます。 open()プロセスが失敗した場合、gはまだNoneに等しいので、if gステートメントはfalseと評価され、readlines()セクションはスキップされます。

1

g変更。

+0

回答ありがとうございます。しかし、 'g'はif文で' None'をどのようにして元に戻しましたか?教科書によると、if文の論理的コンテキスト内で 'g'はFalseとして扱われます。 –

+0

@alexlauそれは決して元に戻されません。 'try' /' catch'の目的は、ファイルを開くことができない場合に 'open'が投げることができる例外をキャッチすることです。 'open'が例外をスローすると、再割り当ては起こらないので、' g'は 'try'が終了したときに' None'を保持します。 'if g:'は基本的に、オープンが成功したかどうかをチェックしています。 – Carcigenicate

0

このコードは、コンパイラがコンパイルされたときに、Python文

によって実行されたステートメントであるインタプリタ言語であることを理解することが重要であるgg = NoneからNoneであることを知っています。コンパイラはより多くの行を読み続ける。 ;それはg = open("mydata.txt", "r")を読み取ると、変数gは現在、ファイルオブジェクトを保持するために、もはやそれは同時に両方Noneと、ファイルの内容にはできませんnone

関連する問題