нормальное поведение urllib / urllib2 - если в заголовке ответа отправляется код ошибки (т. Е. 404), возникает исключение.
Как вы смотрите на конкретные ошибки, т. Е. (40x или 50x), основанные на разных ошибках, делают разные вещи. Кроме того, как вы читаете фактические данные, возвращаемые HTML / JSON и т. Д. (Данные обычно содержат подробные сведения об ошибках, которые отличаются от кода ошибки HTML)