2016-09-26 2 views
1

В настоящее время я работаю над функцией проверки, которая возвращает True или False на основе выражения (если инструкция). Заголовок base64 декодируется, а затем json.loads используется для преобразования его в dict. Ниже приведен метод:Функция возвращает false, когда она должна возвращаться. Проблема с кодировкой?

@staticmethod 
    def verify(rel): 
     if not('hello' in rel and rel['hello'] is 'blah' and 'alg' in rel and rel['alg'] is 'HS256'): 
      return False 
     return True 

Проверка только завершается с ошибкой, если параметр был базовым 64, декодированным и преобразованным в dict. Зачем? Любая помощь будет оценена по достоинству.

Редактировать: В соответствии с запросом, вот как я называю метод. Python 3.5.2

p = {'hello': 'blah', 'alg': 'HS256'} 
f = urlsafe_b64encode(json.dumps(p).encode('utf-8')) 
h = json.loads(str(urlsafe_b64decode(f))[2:-1], 'utf-8') 
print(verify(h)) 
+0

Думаю, нам нужно больше контекста. Как выглядит вызов этой функции? И данные передаются ему? – sdsmith

ответ

2

Проблема здесь ваше использование оператора is проверить равенство строк. Оператор is проверяет, относятся ли его два аргумента к одному и тому же объекту, который не является поведением, которое вы хотите здесь. Чтобы проверить, равны ли строки, используйте оператор равенства:

def verify(rel): 
    if not('hello' in rel and rel['hello'] == 'blah' and 'alg' in rel and rel['alg'] == 'HS256'): 
     return False 
    return True 
+0

Хорошо спасибо. Я должен был это видеть. – Corgs