Хотя ответ уже есть, я хотел бы отметить, что URLlib2
может не быть единоличным ответственным за такое поведение.
Как указано здесь (и, как это также кажется на основании описания проблемы), исключение может принадлежать библиотеке socket
.
В этом случае просто добавьте еще except
:
import socket
try:
resp = urllib2.urlopen(req, timeout=5)
except urllib2.URLError:
print "Bad URL or timeout"
except socket.timeout:
print "socket timeout"