Как заставить Python корректно форматировать None и несуществующие поля [duplicate]

На этот вопрос уже есть ответ здесь:

Оставьте значения пустыми, если они не переданы в str.format 5 ответов

Если я напишу на 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))

Я получил:

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

Вместо сообщения об ошибке,как я могу заставить Python более изящно отформатировать None?и несуществующие поля?

Чтобы привести пример, я хотел бы видеть в выводе что-то вроде:

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

В идеале, конечно, я хотел бы иметь возможность указать используемую строку вместо этих пропущенных значений.

Ответы на вопрос(3)

Ваш ответ на вопрос