Exception Handling
Guidance
- Catch only the exceptions you can handle.
- Keep try blocks narrow to avoid hiding unrelated bugs.
- Preserve context with specific exception types and messages.
Bad Example
def save_website_title(url, filename):
try:
resp = requests.get(url)
obj = re.search(r"<title>(.*)</title>", resp.text)
if not obj:
print("save failed: title tag not found in page content")
return False
title = obj.grop(1)
with open(filename, "w") as fp:
fp.write(title)
return True
except Exception:
print(f"save failed: unable to save title of {url} to {filename}")
return False
Good Example
from requests.exceptions import RequestException
def save_website_title(url, filename):
try:
resp = requests.get(url)
except RequestException as exc:
print(f"save failed: unable to get page content: {exc}")
return False
obj = re.search(r"<title>(.*)</title>", resp.text)
if not obj:
print("save failed: title tag not found in page content")
return False
title = obj.group(1)
try:
with open(filename, "w") as fp:
fp.write(title)
except IOError as exc:
print(f"save failed: unable to write to file {filename}: {exc}")
return False
else:
return True