вот фрагмент кода, который нарушает работу:
data = requests.get(searchURL, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False)
feed_data = data.content
d = feedparser.parse(feed_data)
tickets=[]
for ticketNum in d['entries'] :
tickets.append(ticketNum['title'])
s = requests.Session()
s.get(ticketsBaseUrl, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False)
for ticket in tickets :
ticket_page = s.get(ticketsBaseUrl+ticket, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False )
if ticket_page.status_code == 404 :
print('ticket %s data 404, skipping' %ticket)
continue
Теперь этот фрагмент кода сам по себе приводит к ожидаемым 3 пропускам для ответа 404.
Однако, когда я добавляюеще:
data = requests.get(searchURL, auth=HTTPBasicAuth(config.flxusername,
config.flxpassword), verify=False)
feed_data = data.content
d = feedparser.parse(feed_data)
tickets=[]
for ticketNum in d['entries'] :
tickets.append(ticketNum['title'])
s = requests.Session()
s.get(ticketsBaseUrl, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False)
for ticket in tickets :
ticket_page = s.get(ticketsBaseUrl+ticket, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False )
if ticket_page.status_code == 404 :
print('ticket %s data 404, skipping' %ticket)
continue
else :
etree = ET.fromstring(ticket_page.content)
print(etree)
Последние 404 содержимого страницы передаются в etree, и сценарий выдает ошибки.
Когда я просто делаю else: print (ticket_page.status_code), он печатает 3 сообщения об ошибках, а остальные печатает 200. Он только начинает пытаться проанализировать последние 404, когда я вставляю часть etree.Это сводит с ума.
Что мне здесь не хватает?
Пробовал другую альтернативу:
data = requests.get(searchURL, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False)
feed_data = data.content
d = feedparser.parse(feed_data)
tickets=[]
for ticketNum in d['entries'] :
tickets.append(ticketNum['title'])
s = requests.Session()
s.get(ticketsBaseUrl, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False)
for ticket in tickets :
ticket_page = s.get(ticketsBaseUrl+ticket, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False )
if ticket_page.status_code == 404 :
print('ticket %s data 404, skipping' %ticket)
continue
etree = ET.fromstring(ticket_page.content)
это также не пропускает последние 404.
проверял меньший раздел кода:
if ticket_page.status_code == 404 :
print(str(ticket_page.status_code) + ' ' + ticket)
continue
else :
print(ET.fromstring(ticket_page.content))
терпит неудачу;попытался вывести последние 404 из списка.
if ticket_page.status_code == 404 :
print(str(ticket_page.status_code) + ' ' + ticket)
continue
else :
print('continued')
работает, печатает 3 404 и печатает продолжение для всего остального.(что не является технически правильным; фактически он обрабатывал все остальное)
Попробовал обратный путь:
if ticket_page.status_code == 200:
print(ET.fromstring(ticket_page.content))
else :
print(str(ticket_page.status_code) + ' ' + ticket)
continue
if ticket_page.status_code != 200:
print(str(ticket_page.status_code) + ' ' + ticket)
continue
else :
print(ET.fromstring(ticket_page.content))
if ticket_page.status_code != 200:
print(str(ticket_page.status_code) + ' ' + ticket)
continue
print(ET.fromstring(ticket_page.content))
тот же результат.все еще терпит неудачу в последних 404
даже
for ticket in tickets :
ticket_page = s.get(ticketsBaseUrl+ticket, auth=HTTPBasicAuth(config.flxusername, config.flxpassword), verify=False )
if ticket_page.status_code != 200:
tickets.pop()
оставляет 404 в списке.
Это XML, который выдает ошибку разбора:
b'<?xml version="1.0" standalone="yes"?>\n\n<error><statusCode>404</statusCode><name>Not Found</name><description>The server has not found anything matching the request URI: Ticket not found</description></error>\n\n'
Последний тест:
if 'statusCode' in tree_root.decode() :
print(ticket)
continue
это дает мне 3 ожидаемых билета.
if 'statusCode' in tree_root.decode() :
print(ticket)
continue
etree = ET.fromstring(ticket_page.content.decode())
print(etree)
это не проходит на 3-м билете 404.Добавление задержки, думая, что это происходило из-за тонны 200 перед финальными 404, не изменило результат.