is
тесты для идентичности . Код состояния действительно не совпадает с объектом 403
или codes.forbidden
. Значением состояния является целое число, а не объект перечисления синглтона.
Используйте ==
, чтобы проверить, совпадает ли значение :
if addresses.status_code == 403:
# ...
assert addresses.status_code != 403
assert addresses.status_code != codes.forbidden
assert addresses.status_code == codes.ok
или просто используйте
addresses.raise_for_status() # raises an exception if not 1xx, 2xx or 3xx
Метод Response.raise_for_status()
вызывает исключение requests.exceptions.HTTPError
(подкласс requests.exceptions.RequestException
, в свою очередь подкласс OSError
).
Обратите внимание, что иногда is
будет работать с целыми числами или любым количеством других типов. Но если нет специальной документации, в которой вы можете использовать тесты идентичности, вы вместо этого нашли подробности реализации, где Python будет повторно использовать объекты по соображениям производительности. Так обстоит дело с маленькими целыми числами (от -5 до 256), со строками в некоторых случаях и многими другими угловыми случаями. Так что address.status_code is 200
просто работает в современных интерпретаторах CPython, но это не дано и на него не следует полагаться .