Decorador geral para embrulhar tente exceto em python?

Eu interagindo com um monte de json profundamente aninhados que eu não escrevi, e gostaria de tornar meu script python mais 'perdoável' para entradas inválidas. Eu me vejo escrevendo tentando - exceto blocos, e prefiro apenas envolver a função duvidosa.

Eu entendo que é uma política ruim engolir exceções, mas eu prefiro que elas sejam impressas e analisadas mais tarde, do que parar a execução. É mais valioso, no meu caso de uso, continuar executando o loop do que obter todas as chaves.

Aqui está o que estou fazendo agora:

try:
    item['a'] = myobject.get('key').METHOD_THAT_DOESNT_EXIST()
except:
    item['a'] = ''
try:
    item['b'] = OBJECT_THAT_DOESNT_EXIST.get('key2')
except:
    item['b'] = ''
try:
    item['c'] = func1(ARGUMENT_THAT_DOESNT_EXIST)
except:
    item['c'] = ''
...
try:
    item['z'] = FUNCTION_THAT_DOESNT_EXIST(myobject.method())
except:
    item['z'] = ''

Aqui está o que eu gostaria, (1):

item['a'] = f(myobject.get('key').get('subkey'))
item['b'] = f(myobject.get('key2'))
item['c'] = f(func1(myobject)
...

ou (2):

@f
def get_stuff():
   item={}
   item['a'] = myobject.get('key').get('subkey')
   item['b'] = myobject.get('key2')
   item['c'] = func1(myobject)
   ...
   return(item)

... onde posso envolver o item de dados único (1) ou uma função mestre (2), em alguma função que transforma exceções de parada de execução em campos vazios, impressos em stdout. O primeiro seria uma espécie de salto de item - onde essa chave não está disponível, ela fica em branco e continua - o último é um salto de linha, onde se qualquer um dos campos não funcionar, o registro inteiro é ignorado.

Meu entendimento é que algum tipo de wrapper deve ser capaz de consertar isso. Aqui está o que eu tentei, com um wrapper:

def f(func):
   def silenceit():
      try:
         func(*args,**kwargs)
      except:
         print('Error')
      return(silenceit)

Veja por que isso não funciona. Chame uma função que não existe, não tente pegar:

>>> f(meow())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'meow' is not defined

Antes mesmo de adicionar um valor de retorno em branco, gostaria de tentar obtê-lo corretamente. Se a função tivesse funcionado, isso teria impresso "Erro", certo?

Uma função de invólucro é a abordagem correta aqui?

ATUALIZAR

Eu tive muitas respostas úteis e úteis abaixo, e obrigada por elas --- mas eu editei os exemplos que usei acima para ilustrar que estou tentando capturar mais do que erros de chave aninhados, que eu Estou olhando especificamente para uma função que envolve um try-catch para ...

Quando um método não existe.Quando um objeto não existe e está recebendo um método chamado.Quando um objeto que não existe está sendo chamado como um argumento para uma função.Qualquer combinação de qualquer uma dessas coisas.Bônus, quando uma função não existe.

questionAnswers(8)

yourAnswerToTheQuestion