Cómo hacer que Python formatee correctamente el formato Ninguno y los campos no existentes [duplicar]

Esta pregunta ya tiene una respuesta aquí:

Dejando los valores en blanco si no se pasa en formato str. 5 respuestas

Si escribo en Python:

data = {'n': 3, 'k': 3.141594, 'p': {'a': 7, 'b': 8}}
print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))
del data['k']
data['p']['b'] = None
print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))

Yo obtengo:

3, 3.14, 7, 8
Traceback (most recent call last):
  File "./funky.py", line 186, in <module>
    print('{n}, {k:.2f}, {p[a]}, {p[b]}'.format(**data))
KeyError: 'k'

En lugar de un mensaje de error,¿Cómo puedo hacer que Python formatee con más gracia los campos Ninguno e inexistente?

Para dar un ejemplo, me gustaría ver en la salida algo más como:

3, 3.14, 7, 8
3, ~, 7, ~

Lo ideal es que, por supuesto, me gustaría poder especificar la cadena utilizada en lugar de los valores que faltan.

Respuestas a la pregunta(3)

Su respuesta a la pregunta