วิธีจัดการกับไฟล์ที่ไม่พบข้อยกเว้น

Aug 15 2020

พื้นหลัง

ฉันมีฟังก์ชั่นที่ฉันแคชไฟล์จาก aws s3 ฉันระบุพา ธ บน s3 และโลคัลพา ธ ที่ฉันต้องการให้ไฟล์แคชอยู่ บางครั้งหากไม่มีไฟล์ใน s3 มันจะส่งคืนข้อผิดพลาด 404 นั่นเป็นเรื่องที่สมเหตุสมผล แต่ฉันต้องการจัดการมันอย่างสง่างาม สิ่งที่ฉันต้องการทำคือถ้าไม่มีไฟล์ที่ฉันพยายามแคชฉันต้องการให้ฟังก์ชัน get_overview_stream ของฉันส่งคืนไม่มี

รหัส

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

พยายามแก้ไขปัญหา

ฉันยังใหม่กับ python มากดังนั้นฉันจึงไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุดในการจัดการข้อยกเว้นนี้หรือไม่และมีวิธีที่สะอาดกว่านี้หรือไม่ ถ้าเป็นเช่นนั้นฉันชอบที่จะรับฟังความคิดเห็น

คำตอบ

1 D.SM Aug 18 2020 at 10:51

ฉันไม่แนะนำให้เปิดไฟล์ในฟังก์ชันของคุณ แต่ส่งคืนเส้นทางแทนหรือNoneเพื่อให้ผู้โทรสามารถเปิดไฟล์โดยใช้withคำสั่ง