Итак, мне интересно. У меня есть следующая проблема, из-за которой выталкиванию словаря требуется несколько проверок и противовесов, прежде чем что-то делать с вытолкнутым значением.
Я знаю, что:
Если ключ существует в словаре, то dict.pop()
удаляет элемент с данным ключом из словаря и возвращает его значение.
Если указанный ключ не существует в словаре, он возвращает заданное значение по умолчанию.
Если данный ключ не существует в словаре, и значение pop по умолчанию не передается, то он вызывает KeyError.
Итак, я почувствовал, что 3. Мне нужно было сначала обработать исключение KeyError
. Если это произойдет, извлеките этот ключ из словаря.
Затем, 2, если возвращается значение по умолчанию, никаких действий не предпринимайте.
Затем, если 1, выполните некоторую проверку, так как значение должно соответствовать предопределенный формат строки (соответствие регулярных выражений для электронной почты с использованием встроенного Django в from django.core.validators import email_re
, если детали важны).
У нас есть следующее:
def some_function():
try:
email = account.pop('email', None)
except KeyError as ex:
return
if not email:
return
if not email_re.match(email):
return
# Get/Update Or Create SurfAccount:
surf_account, created = SurfAccount.objects.update_or_create(
email=email,
defaults=account
)
return surf_account, surfer
Однако я не уверен, что это самый идиоматический c способ выполнить всплывающее окно с проверкой в сочетании с обработчиком исключений KeyError ... потому что мы можем столкнуться с TypeError, если вызовем функцию следующим образом:
surf_account, surfer = some_function()
Потому что мы просто "returning
", когда проверка не проходит ...
Q.) Итак, какой самый лучший идиоматический c способ выполнить такой словарь выскочить с проверка