Always use safe dictionary access patterns when handling potentially null or missing values. This prevents KeyError and AttributeError exceptions that can crash your application.
Key practices to follow:
.get()
with default values when accessing dictionaries:
# Instead of conf["properties"]["siteConfig"]
# Use this pattern:
conf.get("properties", {}).get("siteConfig")
# Before accessing nested attributes or methods:
if isinstance(nic_bloc, dict) and nic_bloc.get('allow_ip_spoofing', [False])[0]:
# Process nic_bloc
# For dictionaries with empty values vs None
if each["change"]["before"] is None: # Check specifically for None
each["change"]["before"] = {}
# For complex nested access:
inline_suppressions_by_cve = inline_suppressions.get("cves", {}).get("byCve", [])
for cve_suppression in inline_suppressions_by_cve:
cve_id = cve_suppression.get("cveId")
if cve_id:
cve_by_cve_map[cve_id] = cve_suppression
This pattern reduces bugs, improves code readability, and eliminates the need for multiple conditional checks.
Enter the URL of a public GitHub repository