Моя проблема связана с обработкой ошибок объекта ошибки python urllib. Я не могу прочитать сообщение об ошибке, сохранив его нетронутым в объекте ошибки, чтобы его можно было использовать позже.
response = urllib.request.urlopen(request) # request that will raise an error
response.read()
response.read() # is empty now
# Also tried seek(0), that does not work either.
Вот как я собираюсь его использовать, но когда всплывает исключение, второй раз становится пустым.
try:
response = urllib.request.urlopen(request)
except urllib.error.HTTPError as err:
self.log.exception(err.read())
raise err
Я попытался сделать глубокую копию объекта с ошибкой,
import copy
try:
response = urllib.request.urlopen(request)
except urllib.error.HTTPError as err:
err_obj_copy = copy.deepcopy(err)
self.log.exception(
"Method:{}\n"
"URL:{}\n"
"Data:{}\n"
"Details:{}\n"
"Headers:{}".format(method, url, data, err_obj_copy.read(), headers))
raise err
но копия не может сделать глубокую копию и выдает ошибку - TypeError: __init__() missing 5 required positional arguments: 'url', 'code', 'msg', 'hdrs', and 'fp'
.
Как прочитать сообщение об ошибке, сохранив его в объекте?
Я знаю, как это сделать с помощью requests
, но я застрял с устаревшим кодом, и мне нужно заставить его работать с urllib