Короче говоря: Вы не получите сообщение, потому что не указали его.
Возможно, вы захотите проверить 'Failure: '
вместо 'Error: '
, посколькуэто то, что вы префикс исходного сообщения исключения.Это может быть реальной проблемой в вашем коде, а не пустым строковым представлением исключения, которое вы вызываете в своем тесте.
Почему str(err)
пусто?
Посмотрите на иерархию классов:
BaseException
Exception
IOError
requests.RequestException
requests.ConnectionError
IOError
переопределяет __str__
, если конструктору передано более одного аргумента, но в противном случае применяется поведение BaseException
:
Если str ()вызывается для экземпляра этого класса, возвращается представление аргумента (ов) к экземпляру или пустая строка, когда не было аргументов.https://docs.python.org/3/library/exceptions.html#BaseException
>>> import requests
>>> str(requests.exceptions.ConnectionError())
''
>>> str(requests.exceptions.ConnectionError('foo'))
'foo'
>>> str(requests.exceptions.ConnectionError('foo', 'bar'))
'[Errno foo] bar'
Последний пример - это поведение, определяемое исключением IOError
.