попытка обновить URL-адрес в запросе библиотеки urlib, если в ответе есть ошибка

#python-3.x #xml-parsing #urllib

Вопрос:

Я пытаюсь выполнить запрос внутри класса, и если ответ плохой ( либо нет xml-файла, либо запрос 404), я хотел бы обновить URL-адрес и отправить запрос снова. ошибка, которую я получаю с нижеприведенным основным классом, такова : ml.etree.ElementTree.ParseError: несоответствующий тег: строка 15, столбец 2 Я знаю, что получаю эту ошибку, когда в ответе нет xml-файла. Я хотел бы обновить URL-адрес, когда у меня возникнет эта ошибка, и повторить попытку, чтобы увидеть, получу ли я ответ с помощью xml-файла. Когда в ответе есть xml — файл, я не получаю никаких ошибок. Вот мой основной урок :

 class jenkinsRepo:
    def __init__(self,url_nm,user,passd):
            try: 
                self.url_nm=url_nm
                self.res = requests.get(url_nm,auth=(user,passd), stream=True)
                #self.res.raise_for_status()
            except (if res is not a valid xml or has 404 response then do the following which will update the url )
                #self.url_nm=url_nm.replace("config","demo")
                #self.res = requests.get(self.url_nm,auth=(user,passd), stream=True) 
                                 
            self.root = ET.fromstring(self.res.raw.data)

  def checkConfig(self):
        return (self.url_nm)
        
 

и мой телефонный файл

 for i in range (total):
    url1=(sh['list'][i])
    #print (url1)
    call1 = jenkinsRepo(url1,user,password)
    out1=call1.checkConfig()
    print(out1)
 

я смог вызвать ошибку со следующим кодом, но затем не смог обновить URL-адрес для другого запроса.
Код, который вызвал ошибку, выглядит следующим образом:

 lass jenkinsRepo:
    def __init__(self,url_nm,user,passd):
            try: 
                self.url_nm=url_nm
                self.res = requests.get(url_nm,auth=(user,passd), stream=True)
                self.res.raise_for_status()
            except requests.exceptions.HTTPError  as e:
                raise  e #SystemExit(err)
                #response.raise_for_status() 
                #if requests.exceptions.HTTPError.status_code == 404:
                raise e(self.model_name   ' model may be unavailable.')
                self.url_nm=url_nm.replace("config","demo")
                self.res = requests.get(self.url_nm,auth=(user,passd), stream=True) 
                                 
            self.root = ET.fromstring(self.res.raw.data)