request.POST.get ('sth') vs request.POST ['sth'] - fark?


84

Arasındaki fark nedir

request.POST.get('sth')

ve

request.POST['sth']

Benzer soruyu bulamadım, ikisi de benim için aynı işe yarıyor, farz edin ki bunları ayrı ayrı kullanabilirim ama belki yanılıyorum, bu yüzden soruyorum. Herhangi bir fikir?

Yanıtlar:


195

request.POST['sth']Bir zam olacak KeyErroreğer istisna 'sth'değildir request.POST.

request.POST.get('sth')dönecektir Noneeğer 'sth'değil request.POST.

Ek olarak, .getanahtar sözlükte değilse döndürülen bir varsayılan değerin ek parametresini sağlamanıza izin verir. Örneğin,request.POST.get('sth', 'mydefaultvalue')

Bu, herhangi bir python sözlüğünün davranışıdır ve özel değildir request.POST.



Bu iki kod parçacığı işlevsel olarak aynıdır:

İlk snippet:

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


İkinci pasaj:

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



Bu iki kod parçacığı işlevsel olarak aynıdır:

İlk snippet:

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


İkinci pasaj:

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



Bu iki kod parçacığı işlevsel olarak aynıdır:

İlk snippet:

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


İkinci pasaj:

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

13
+1. .Get'in python sözlükleri için varsayılan davranış olduğunu belirtmek için.
Tommy Strand

1
"Bu, herhangi bir python sözlüğünün davranışıdır ve isteğe özgü değildir.POST" Bu cevabı python ile ilk günümde okumuş olsaydım keşke ... +1!
kikusin

0

Normal sözlüklere erişim ile .get () ile erişim arasındaki temel fark şudur:

request.POST['sth']Will gibi bir şeyin kullanılmasıyla önemli bir hata, ket 'sth'in mevcut olmamasıdır. Ancak get () yöntemi sözlüklerini kullanmak size daha iyi hata işleme sağlar.

request.POST.get('sth')

hiçbiri 'sth mevcut değil' anahtarını döndürür ve ayrıca get () 'ye ikinci parametre verildiğinde varsayılan değer olarak geri döner.

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

'sth' anahtarı yoksa, verilerdeki değer olacaktır my_default_value. Normal sözlük erişimine göre get () yöntemini kullanmanın avantajı budur.


2
Bu cevapta, şimdiden yüksek oy alan ve kabul edilen cevapta yer almayan nedir?
Stephen Rauch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.