Validation starts by checking that incoming records contain the fields later code expects.

required fields A required-field check reports missing keys before code reads values from a dictionary.

Required Fields

include_email
required.py
Replay: real traced execution (multi-file project)
def missing_fields(record, required):
    missing = []

    for field in required:
        if field not in record:
            missing.append(field)

    return missing


include_email = False
user = {"name": "Ada"}

if include_email:
    user["email"] = "ada@example.com"

missing = missing_fields(user, ["name", "email"])
print("missing=" + ",".join(missing) if missing else "missing=none")
def missing_fields(record, required):
    missing = []

    for field in required:
        if field not in record:
            missing.append(field)

    return missing


include_email = True
user = {"name": "Ada"}

if include_email:
    user["email"] = "ada@example.com"

missing = missing_fields(user, ["name", "email"])
print("missing=" + ",".join(missing) if missing else "missing=none")
  1. include_email ← False, user ← {'name': 'Ada'}

    11include_email→ False = False  #@include_email=True12user→ {'name': 'Ada'} = {"name": "Ada"}1314if include_email:15    user["email"] = "ada@example.com"1617missing = missing_fields(user{'name': 'Ada'}, ["name", "email"])18print("missing=" + ",".join(missing) if missing else "missing=none")
  2. missing ← []

    1def missing_fields(record{'name': 'Ada'}, required['name', 'email']):2    missing→ [] = []
  3. for field in required:

    pass 1 of 2
    4for fieldname in required['name', 'email']:5    if field not in record:6        missing.append(field)
  4. for field in required:

    pass 2 of 2
    4for fieldemail in required['name', 'email']:5    if field not in record:6        missing.append(field)
  5. missing ← ['email']

    4for field in required:5    if fieldemail not in record{'name': 'Ada'}:6        missing→ ['email'].append(fieldemail)
  6. return missing

    8return missing['email']
  7. missing ← ['email']

    17missing→ ['email'] = missing_fields(user{'name': 'Ada'}, ["name", "email"])18print("missing=" + ",".join(missing['email']) if missing else "missing=none")
    outputmissing=email
  1. include_email ← True, user ← {'name': 'Ada'}

    11include_email→ True = True12user→ {'name': 'Ada'} = {"name": "Ada"}
  2. user[”email”] ← ada@example.com

    14if include_emailTrue:15    user["email"]→ ada@example.com = "ada@example.com"
  3. missing = missing_fields(user, ["name", "email"])

    17missing = missing_fields(user{'name': 'Ada', 'email': 'ada@example.com'}, ["name", "email"])18print("missing=" + ",".join(missing) if missing else "missing=none")
  4. missing ← []

    1def missing_fields(record{'name': 'Ada', 'email': 'ada@example.com'}, required['name', 'email']):2    missing→ [] = []
  5. for field in required:

    pass 1 of 2
    4for fieldname in required['name', 'email']:5    if field not in record:6        missing.append(field)
  6. for field in required:

    pass 2 of 2
    4for fieldemail in required['name', 'email']:5    if field not in record:6        missing.append(field)
  7. return missing

    8return missing[]
  8. missing ← []

    17missing→ [] = missing_fields(user{'name': 'Ada', 'email': 'ada@example.com'}, ["name", "email"])18print("missing=" + ",".join(missing[]) if missing else "missing=none")
    outputmissing=none