Озадачен результатами If, продолжай, а остальное в python - PullRequest
0 голосов
/ 06 декабря 2018

вот фрагмент кода, который нарушает работу:

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, не изменило результат.

1 Ответ

0 голосов
/ 17 декабря 2018

Ответ таков:

Проверьте все свои 200;это был не 404, который вызывал проблему.У одного из 200-х плохой XML.Большинство вариантов, которые я выложил, работают и работают отлично.Я проводил выборочную проверку своих 200-х, и при каждой выборочной проверке я пропускал проверку с плохим XML.Я понял, как справиться с плохим XML, и смог его завершить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...