Python文件不存在异常

Python文件不存在异常,python,file,exception-handling,Python,File,Exception Handling,我试图打开一个文件并从中读取,如果文件不在那里,我会捕获异常并向stderr抛出一个错误。我拥有的代码: for x in l: try: f = open(x,'r') except IOError: print >> sys.stderr, "No such file" , x 但是没有任何内容被打印到stderr,如果文件名不存在或者问题出在其他地方,open是否会创建新文件?您有os.path.exists函数

我试图打开一个文件并从中读取,如果文件不在那里,我会捕获异常并向stderr抛出一个错误。我拥有的代码:

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

但是没有任何内容被打印到stderr,如果文件名不存在或者问题出在其他地方,open是否会创建新文件?

您有os.path.exists函数:

import os.path
os.path.exists(file_path)
返回bool

尝试以下操作:

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)
这里的目标是尽可能清楚地了解正在发生的事情。我们首先通过调用
os.path.exists(x)
检查文件是否存在。这将返回True或False,允许我们在
if
语句中简单地使用它


从那里,您可以打开文件进行读取,或者根据需要处理退出。使用Python3样式的print函数可以显式地声明输出的位置,在本例中为stderr

这对我很管用。为什么不能使用os.path.exists()呢


可能文件在那里。打印后>>意味着什么?将输出重定向到标准错误。我很确定这个文件不存在,因为我正在用一个不存在的文件测试它。但是没有任何东西被打印出来。。。这对我来说很好。从脚本运行,该目录中没有文件,错误打印得很好。如果您尝试运行
open(x,'r')
而不将其包含在try语句中,是否会出现错误?不,如果文件存在,则不会出现错误,但如果出现错误,则不会打印。文件名“x”来自一个列表,因此我编辑了上面的代码,因为我忘记将其放入循环中。但不确定这是否有区别?我还是无法复制你的观察结果。您确定脚本在正确的目录中查找文件吗?你绝对确定这个文件不存在吗?您是否可以启用一些错误抑制功能?简单地说,如果运行just
open('asdfghj')
,是否会出现错误?当然,假设您没有具有该名称的文件。实际上,将
open()
调用放在try/except块中几乎肯定会更好——调用open可能会由于文件不存在以外的原因而失败(如果文件存在,但当前进程没有读取权限,代码中会发生什么?BOOM——需要捕获的异常。)这是EAFP击败LBYL的情况。
for x in l:
    if not os.path.exists(x):
        print >> sys.stderr , "No such file", x