Django / Python - попробуй / кроме проблемы - PullRequest
0 голосов
/ 12 января 2010

У меня есть такой код:

try:
            var = request.POST['var']                                        
except NameError:                
            var = ''

Почему всегда выполняется код после «кроме»? Даже если request.POST['var'] существует.

Ответы [ 5 ]

8 голосов
/ 12 января 2010

Откуда вы знаете, что это выполняется?Возможно, request.POST['var'] - это также '', поэтому вы не можете заметить разницу.

Кроме того, единственный способ, которым

var = request.POST['var'] 

может поднять NameError, это если requestне существует.

Если request.POST не существует, это означает, что POST не существует как атрибут request, что повышает AttributeError, а если request.POST['var'] не существуетсуществует, значит 'var' не является ключом request.POST, таким образом, вместо этого увеличивается KeyError.


РЕДАКТИРОВАТЬ:

Я предполагаю, что вы не отправляете POST.Но не могу знать наверняка.

2 голосов
/ 12 января 2010

Устраните догадки и замените NameError чем-то вроде KeyboardInterrupt, посмотрите на трассировку, и вы точно поймете, в чем проблема.

1 голос
/ 12 января 2010

каков результат следующего в вашем случае?

except NameError, e:
    print e
1 голос
/ 12 января 2010

Лучший способ сделать то, что вы пытаетесь сделать, может быть

var = request.POST.get('var', 'some default value')

, где вторым аргументом метода get POST-диктата является значение, которое возвращается, если ключ ('var' в данном случае) не существует. Точный перевод вашего примера приведет к:

var = request.POST.get('var', '')

Таким образом, try...except блок или условные операторы не нужны.

0 голосов
/ 12 января 2010

1001 * попробовать *

try:
            if request.method == 'POST':
               var = request.POST['var']                                        
except NameError:                
               var = ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...