Validation often applies default values before code reads configuration fields.

Defaults Merge

defaults.py
def with_defaults(defaults, overrides):
    merged = {**defaults, **overrides}
    return merged


timeout = 
defaults = {"timeout": 10, "retries": 2}
overrides = {"timeout": timeout}
config = with_defaults(defaults, overrides)

print(f"timeout={config['timeout']};retries={config['retries']}")
def with_defaults(defaults, overrides):
    merged = {**defaults, **overrides}
    return merged


timeout = 
defaults = {"timeout": 10, "retries": 2}
overrides = {"timeout": timeout}
config = with_defaults(defaults, overrides)

print(f"timeout={config['timeout']};retries={config['retries']}")
defaults Merging defaults with overrides gives every expected configuration key a value.