Saya mencoba membuat direktori hanya jika tidak ada menggunakan Python.

Jika direktori tidak ada, skrip berjalan dengan baik. Tetapi jika sudah ada saya mendapatkan kesalahan yang mengatakan:

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'

Ini kode saya:

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

Saya ingin pengecualian untuk mengizinkan skrip untuk melanjutkan jika menemukan kesalahan seperti ini. Bagaimana saya bisa melakukannya?

1
bluethundr 7 Januari 2021, 22:37

2 jawaban

Hanya saja, jangan ulangi kesalahannya

# Create output files directory
try:
    os.makedirs(source_files_path)
except OSError as e:
    print(f"An error has occurred. Continuing anyways: {e}")

Tetapi kami sebenarnya tidak ingin melewatkan semua kesalahan OS, hanya jika file tersebut tidak ada, jadi solusi yang lebih baik adalah:

# 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
2
wp-overwatch.com 7 Januari 2021, 19:52

Seperti yang disarankan Tomerikoo, Anda juga dapat menggunakan 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

Saya meninggalkan ini di bawah ini sebagai referensi, karena mungkin cocok untuk situasi lain yang serupa.

Anda dapat memeriksa dengan os.path.isdir< /a> dalam kasus Direktori:

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

Atau, Anda dapat menggunakan os.path.isfile jika ada jalur file:

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
1
Tomerikoo 8 Januari 2021, 10:18