फ़ाइल को संभालने के लिए साफ तरीका अपवाद नहीं मिला

Aug 16 2020

पृष्ठभूमि

मेरे पास एक फ़ंक्शन है जहां मैं a3 s से फ़ाइल कैश करता हूं। मैं इसे s3 पर पथ प्रदान करता हूं और स्थानीय पथ भी जहां मैं चाहता हूं कि कैश्ड फ़ाइल लाइव हो। कभी-कभी अगर फ़ाइल s3 पर मौजूद नहीं है तो यह 404 त्रुटि लौटाएगा। यह समझ में आता है, लेकिन मैं इसे इनायत से संभालना चाहता हूं। मैं जो करना चाहता हूं वह यह है कि जिस फाइल को मैं कैश करने की कोशिश कर रहा हूं, वह मौजूद नहीं है मैं चाहता हूं कि मेरा get_overview_stream फ़ंक्शन वापस न लौटे।

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

समाधान का प्रयास जारी

मैं अजगर के लिए बहुत नया हूं इसलिए मुझे यकीन नहीं है कि अगर इस अपवाद को संभालने का सबसे अच्छा तरीका है और यदि अधिक क्लीनर तरीका है। यदि ऐसा है तो मुझे प्रतिक्रिया सुनना अच्छा लगेगा।

जवाब

1 D.SM Aug 18 2020 at 10:51

मैं सुझाव दूंगा कि आप अपने फंक्शन में फाइल न खोलें, लेकिन रास्ते को वापस करने के बजाय या None, जैसे कि कॉलर withस्टेटमेंट का उपयोग करके फाइल को खोल सकता है ।