Примечание: обычно "отображающие" типы в Python (словари и словарные классы ... такие как различные типы dbm (индексированный файл) и некоторые интерфейсы СУБД / ORM ... реализуют метод has_key()
.
Каким-то образом вы добавили объект Unicode (строковый) в этот оператор, когда вы ожидали получить какой-либо словарь или другую ссылку на объект сопоставления.
В общем случае AttributeError означает, что вы запутали привязки объектов (присвоения переменных). Вы дали имя некоторому объекту, отличному от того, который вы намеревались. (Или иногда это означает, что вместо has_key()
... и т. Д. У вас есть опечатка типа .haskey ()).
Кстати: использование has_key()
несколько устарело. Обычно лучше тестировать ваши контейнеры с помощью оператора Python in
(который неявно вызывает __contains__()
--- и который работает со списками, строками и другими последовательностями, а также с типами отображения).
Также value.has_key()
вызовет ошибку, даже если value
будет словарём, так как метод .has_key()
требует аргумента.
В вашем коде я либо явно протестировал бы для if postedcountry is not None:
..., либо я бы поставил вашему .get()
(необязательное) значение по умолчанию для "postscountry".
Как вы хотите справиться с ситуацией, когда у request
не было postscountry ? Вы хотите предположить, что это отправлено от некоторого определенного по умолчанию? Принудительно перенаправить на некоторую страницу, которая требует от пользователя предоставить значение для этого элемента формы? Оповещение испанской инквизиции?