あなたの代わりに、ファイルが存在しない場合、あなたはcheck()
をスキップすることができ-1
を返すの例外を発生させたくない場合や直接open()
に移動するか、ファイルで実際にやりたいことを実行してください。
実際に例外を発生させる正しい方法は、です。が発生します。
def check_and_open(file):
# raises FileNotFoundError automatically
with open('xyz', 'r') as fp:
fp.readlnes() # or whatever
をそして、あなたはあなたが開く前に、明示的にチェックしたいならば、これは実際のエラーオブジェクト発生します::はそう
このバージョンの
def check(file):
try:
with open(file, 'r') as fp:
# continue doing something with `fp` here or
# return `fp` to the function which wants to open file
pass
except FileNotFoundError as e:
# log error, print error, or.. etc.
raise e # and then re-raise it
結果は次のとおりです。
>>> check('xyz')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 9, in check
File "<stdin>", line 3, in check
FileNotFoundError: [Errno 2] No such file or directory: 'xyz'
>>>
を
また、raise FileNotFoundError(file)
を実行すると、提供された別の回答と同様に、実際に提起する方法FileNotFoundError
:明示的に上げる
が(ファイル名はERRメッセージとして考えられます):それは実際にはPythonで上げていますどのように
>>> raise FileNotFoundError('xyz')
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
FileNotFoundError: xyz
>>>
:
>>> fp = open('xyz', 'r')
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'xyz'
>>>
>>> # or with `with`:
... with open('xyz', 'r') as fp:
... fp.readlnes()
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'xyz'
>>>
[Pythonで例外を処理する方法](https://wiki.python.org/moin/HandlingExceptions) –
をご覧になりたい場合があります。これはソフトウェアの設計者の責任です。ファイルが存在しないために例外を発生させたい場合は、-1を返す代わりに、自分で例外を発生させます。 – idjaw
"何が起こったか"は、 'os.path.exists(file)'が 'False'を返したことです。呼び出し可能な '.py'ファイルは、この可能な戻り値を処理するように構造化されるべきです。そうしないと、エラーが発生します(これは呼び出し側の手続きに持ち込まれます)。 –