![](/img/trans.png)
[英]Cannot create a file when that file already exists error observed using Python
[英]Python create directory error Cannot create a file when that file already exists
我仅在使用 Python 时才尝试创建目录。
如果目录不存在,则脚本运行良好。 但是,如果它已经存在,我会收到一条错误消息:
An error has occurred: [WinError 183] Cannot create a file when that file already exists: '..\\..\\source_files\\aws_accounts_list'
Traceback (most recent call last):
File ".\aws_ec2_list_instances.py", line 781, in <module>
main()
File ".\aws_ec2_list_instances.py", line 654, in main
mongo_export_to_file(interactive, aws_account, aws_account_number)
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\ec2_mongo.py", line 292, in mongo_export_to_file
create_directories()
File "C:\Users\tdun0002\OneDrive - Synchronoss Technologies\Desktop\important_folders\Jokefire\git\jf_cloud_scripts\aws_scripts\python\aws_tools\ec2_mongo.py", line 117, in create_directories
os.makedirs(source_files_path)
File "C:\Users\tdun0002\AppData\Local\Programs\Python\Python38-32\lib\os.py", line 223, in makedirs
mkdir(name, mode)
FileExistsError: [WinError 183] Cannot create a file when that file already exists: '..\\..\\source_files\\aws_accounts_list'
这是我的代码:
def create_directories():
## Set source and output file directories
source_files_path = os.path.join('..', '..', 'source_files', 'aws_accounts_list')
# Create output files directory
try:
os.makedirs(source_files_path)
except OSError as e:
print(f"An error has occurred: {e}")
raise
如果遇到这样的错误,我希望异常允许脚本继续。 我怎样才能做到这一点?
从 Python 3.4 开始,使用pathlib
使用Path.mkdir
变得非常容易:
from pathlib import Path
def create_directories():
## Set source and output file directories
source_files_path = Path('..', '..', 'source_files', 'aws_accounts_list')
# Create output files directory
source_files_oath.mkdir(parents=True, exist_ok=True)
如果您坚持使用os
,那么makedirs
自 Python 3.2 - exist_ok
以来还有另一个论点,即:
如果exists_ok为
False
(默认值),如果目标目录已经存在,则会引发FileExistsError 。
所以只需更改为:
os.makedirs(source_files_path, exist_ok=True)
只是不要重新提出错误
# Create output files directory
try:
os.makedirs(source_files_path)
except OSError as e:
print(f"An error has occurred. Continuing anyways: {e}")
但我们实际上并不想跳过所有操作系统错误,只有当文件不存在时,所以更好的解决方案是:
# Create output files directory
try:
os.makedirs(source_files_path)
except FileExistsError as e:
print('File already exists')
return False
except OSError as e:
print(f"An error has occurred: {e}")
raise
正如Tomerikoo建议的那样,您也可以使用os.path.exists
import os
if not os.path.exists(source_files_path):
try:
os.makedirs(source_files_path)
except OSError as e:
print(f"An error has occurred: {e}")
raise
我将其保留在下面作为参考,因为它可能适用于其他类似的情况。
如果是目录,您可以使用os.path.isdir
进行检查:
import os
if not os.path.isdir(source_files_path):
try:
os.makedirs(source_files_path)
except OSError as e:
print(f"An error has occurred: {e}")
raise
或者,您可以在文件路径的情况下使用os.path.isfile
:
import os
if not os.path.isfile(source_files_path):
try:
os.makedirs(source_files_path)
except OSError as e:
print(f"An error has occurred: {e}")
raise
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.