फ़ाइल को संभालने के लिए साफ तरीका अपवाद नहीं मिला
पृष्ठभूमि
मेरे पास एक फ़ंक्शन है जहां मैं 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
समाधान का प्रयास जारी
मैं अजगर के लिए बहुत नया हूं इसलिए मुझे यकीन नहीं है कि अगर इस अपवाद को संभालने का सबसे अच्छा तरीका है और यदि अधिक क्लीनर तरीका है। यदि ऐसा है तो मुझे प्रतिक्रिया सुनना अच्छा लगेगा।
जवाब
मैं सुझाव दूंगा कि आप अपने फंक्शन में फाइल न खोलें, लेकिन रास्ते को वापस करने के बजाय या None
, जैसे कि कॉलर with
स्टेटमेंट का उपयोग करके फाइल को खोल सकता है ।