request.POST.get ('sth') проти 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 і не є специфічним для запиту. 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.