Skip to content

Instantly share code, notes, and snippets.

@XoseLluis
Created November 13, 2022 23:16

Revisions

  1. XoseLluis created this gist Nov 13, 2022.
    32 changes: 32 additions & 0 deletions safe_access.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,32 @@
    def safe_access(fn):
    try:
    return fn()
    except (TypeError, KeyError, IndexError, AttributeError):
    return None

    # usage:

    class Person:
    def __init__(self, name, age, profession):
    self.name = name
    self.age = age
    self.profession = profession

    class Profession:
    def __init__(self, name, salary):
    self.name = name
    self.salary = salary

    def format_profession(self, st1, st2):
    return f"{st1}-{self.name}-{st2}"

    p1 = Person("Francois", 4, Profession("programmer", 50000))

    print(safe_access(lambda: p1.name))
    print(safe_access(lambda: p1.city))
    print(safe_access(lambda: p1.city.name))
    print(safe_access(lambda: p1.profession.salary))
    print(safe_access(lambda: p1.profession.format_profession("¡¡", "!!").upper()[:6]))

    # invoking a non callable
    print(safe_access(lambda: p1.profession.salary()))