request.POST.get ('sth') vs request.POST ['sth'] - разница?


84

В чем разница между

request.POST.get('sth')

и

request.POST['sth']

Не нашел похожего вопроса, оба работают одинаково для меня, предположим, я могу использовать их по отдельности, но, возможно, я ошибаюсь, поэтому я спрашиваю. Есть идеи?

Ответы:


195

request.POST['sth']вызовет KeyErrorисключение, если 'sth'его нет request.POST.

request.POST.get('sth')вернется, Noneесли 'sth'его нет request.POST.

Кроме того, .getпозволяет указать дополнительный параметр значения по умолчанию, который возвращается, если ключ отсутствует в словаре. Например,request.POST.get('sth', 'mydefaultvalue')

Это поведение любого словаря Python, не относящееся к request.POST.



Эти два фрагмента функционально идентичны:

Первый фрагмент:

try:
    x = request.POST['sth']
except KeyError:
    x = None


Второй фрагмент:

x = request.POST.get('sth')



Эти два фрагмента функционально идентичны:

Первый фрагмент:

try:
    x = request.POST['sth']
except KeyError:
    x = -1


Второй фрагмент:

x = request.POST.get('sth', -1)



Эти два фрагмента функционально идентичны:

Первый фрагмент:

if 'sth' in request.POST:
    x = request.POST['sth']
else:
    x = -1


Второй фрагмент:

x = request.POST.get('sth', -1)

13
+1. Отметим, что .get - это поведение по умолчанию для словарей Python.
Tommy Strand

1
«Это поведение любого словаря python и не относится к request.POST» Я хотел бы прочитать этот ответ в свой первый день с python ... +1!
kikusin

0

Основное различие между обычным доступом к словарям и доступом к ним с помощью .get () заключается в том, что

При использовании чего-то подобного request.POST['sth']возникнет ключевая ошибка, если кет 'sth' не существует. Но использование словарей метода get () также улучшит обработку ошибок.

request.POST.get('sth')

не вернет none, это ключ «sth не существует», а также, указав второй параметр, get () вернет его как значение по умолчанию.

data = request.POST.get('sth','my_default_value')

если ключ 'sth' не существует, будет значение в данных my_default_value. В этом преимущество использования метода get () перед обычным доступом к словарям.


2
Что представлено в этом ответе, чего еще нет в получившем высокую оценку и принятом ответе?
Стивен Раух
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.