2016-03-24 16 views
1

ファイルを開いてそこからファイルを読み込もうとしていますが、例外が発生し、stderrにエラーがスローされます。私が持っているコード:ファイル名が存在しないか、問題がどこか別の場所であればPythonファイルが存在しない例外

for x in l: 
    try:   
     f = open(x,'r') 
    except IOError: 
     print >> sys.stderr, "No such file" , x 

が、何もstderrに印刷されているが、開いて新しいファイルを作成していますか?

+0

おそらくファイルがあります。 >>とは、出力後に標準エラーに出力する – Muctadir

+0

のことです。ファイルが存在しないと確信しています。なぜなら、そこにないファイルでテストしているからです。まだ何も印刷されていません – jeabesli

+0

うーん...それは私のためにうまく動作します。スクリプトからのラン、そのディレクトリにファイルがありません。エラーはうまくいきました。 'open(x、 'r')'をtryステートメントで囲まずに実行しようとすると、エラーが出ますか? – Reti43

答えて

0

あなたはos.path.exists機能があります。ここでの目標は、約できるだけ明確にすることである

from __future__ import print_statement 
import sys 

if os.path.exists(x): 
    with open(x, 'r') as f: 
     # Do Stuff with file 
else: 
    print("No such file '{}'".format(x), file=sys.stderr) 

import os.path 
os.path.exists(file_path) 

戻りブール

1

ことは、これを試してみてください何が起こっている。最初に、ファイルが存在するかどうかをos.path.exists(x)を呼び出して確認します。これはTrueまたはFalseを返し、単にifステートメントでそれを使用できるようにします。

そこからファイルを開いて読んだり、好きなように終了したりすることができます。 Python3スタイルのprint関数を使うと、出力先を明示的に宣言することができます。この場合、stderrに出力されます。

+1

実際には、try/exceptブロックの中に 'open()'呼び出しを置くことはほぼ確実です。ファイルが存在しない場合は、ファイル内には何も起こりません。現在のプロセスには読み取り権限がありませんか?BOOM - キャッチする必要のある例外です。これは、EAFPがLBYLに勝つ場合です。 – bgporter

0

私のために働く。なぜあなたはos.path.exists()を利用できないのですか?

for x in l: 
    if not os.path.exists(x): 
     print >> sys.stderr , "No such file", x 
関連する問題