这是一个使用示例:
try:
with open('filename') as f:
do_stuff_that_depends_on_the_existence_of_the_file(f)
except IOError as e:
print 'Trouble opening file'
如果您以任何访问权限打开文件,则操作系统将保证该文件存在,否则它将因错误而失败。如果访问是独占的,则任何其他争用该文件的进程要么被您阻止,要么阻止您。
这try
只是一种检测打开文件行为的错误或成功的方法,因为 Python 中的文件 I/O API 通常没有返回码(使用异常代替)。所以要真正回答你的问题,不是try
避免竞争条件的,而是open
. 它在 C(Python 所基于)中基本相同,但没有例外。阅读此内容以获取更多信息。
请注意,您可能希望执行取决于对 try 块内文件的访问权限的代码。关闭文件后,将无法保证其存在。
调用os.path.exists
只是在文件可能存在或可能不存在的时刻给出快照,并且一旦os.path.exists
返回,您就不知道文件的存在。恶意代码或意外逻辑可能会在您不期望的情况下删除或更改文件。这类似于在驶入道路之前转过头来检查道路是否畅通。一旦你转过头来,你就只能猜测你不再看的地方发生了什么。保持文件打开保证了扩展的一致状态,这在驾驶时是不可能的(无论好坏)。:)
try/open
由于os.path.exists
. _ 不幸的是,我不知道在所有情况下都无法阻止在目录中创建文件,所以我认为最好检查文件是否存在,而不是不存在。