Cách sạch sẽ để xử lý tệp không tìm thấy ngoại lệ

Aug 16 2020

LÝ LỊCH

Tôi có một chức năng nơi tôi lưu tệp cache từ aws s3. Tôi cung cấp cho nó đường dẫn trên s3 và cũng là đường dẫn cục bộ nơi tôi muốn tệp được lưu trong bộ nhớ cache. Đôi khi nếu tệp không tồn tại trên s3, nó sẽ trả về lỗi 404. Điều đó có lý nhưng tôi muốn xử lý nó một cách khéo léo. Điều tôi muốn làm là nếu tệp tôi đang cố gắng lưu vào bộ nhớ cache không tồn tại, tôi muốn hàm get_overview_stream của mình trả về Không có.

CODE

def get_overview_stream(*, environment, proxy_key):
    s3_overview_file_path = f"s3://{FOO_TRACK_BUCKET}/{environment}"
    overview_file = f"{proxy_key}.csv"
    local_path = cache_directory(environment)
    try:
        cache.cache_file(s3_overview_file_path, local_path, overview_file)
        overview_file_cache = local_path / f"{proxy_key}.csv"
        return overview_file_cache.open("r")
    except botocore.exceptions.ClientError as e:
        if e.response["Error"]["Code"] == "404":
            return None
        else:
            raise

Sự cố giải pháp đã cố gắng

Tôi là người mới sử dụng python nên tôi không chắc liệu đây có phải là cách tốt nhất để xử lý ngoại lệ này hay không và nếu có cách nào sạch hơn. Nếu vậy tôi rất muốn nghe phản hồi.

Trả lời

1 D.SM Aug 18 2020 at 10:51

Tôi khuyên bạn không nên mở tệp trong hàm của bạn mà thay vào đó trả về đường dẫn hoặc Noneđể người gọi có thể mở tệp bằng withcâu lệnh.