Не удается отловить ошибку HTTP 500: внутренняя ошибка сервера - PullRequest
0 голосов
/ 30 января 2019

Я не могу включить try & except функциональность в свой цикл.Вот код, если вы хотите воспроизвести ошибку:

import datetime
import pandas as pd
import urllib.request
from urllib.error import HTTPError

start = datetime.datetime.strptime("19-09-2016", "%d-%m-%Y")
end = datetime.datetime.strptime("31-12-2017", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days = x) for x in range(0, (end - start).days)]

dates_list = []
for date in date_generated:
    txt = str(str(date.day) + '.' + str(date.month) + '.' + str(date.year))
    dates_list.append(txt)

ndf = pd.DataFrame()  # create empty ndf
for i in range(0, len(dates_list)):
    allURL = 'https://www.uzse.uz/trade_results?date=' + dates_list[i] + '&locale=en&mkt_id=ALL&page=%d'

    for k in range(1, 100):
        url = allURL % k

        errors = []
        try:
            pd.read_html(url)[0].empty
        except HTTPError:
            errors.append(url)

        if pd.read_html(url)[0].empty:
            break
        else:
            chunk = pd.read_html(url)[0]
            chunk['Date'] = dates_list[i] # Date is positioned at last position, let's fix that
            cols = chunk.columns.tolist() # get a list of all the columns
            cols = cols[-1:] + cols[:-1] # rearrange the columns, move the last element (Date) to the first position
            chunk = chunk[cols] # reorder the dataframe
            ndf = pd.concat([ndf, chunk])

print(ndf)

Я пытался изменить try & except разными способами.Но я не могу заставить его работать ... Я также хочу сохранить все эти неработающие URL для дальнейших ручных проверок.Приведенный выше код сообщает об этом:

HTTPError                                 Traceback (most recent call last)
<ipython-input-6-31cafbad5945> in <module>()
     26             errors.append(url)
     27 
---> 28         if pd.read_html(url)[0].empty:
     29             break
     30         else:

 346     # this version of raise is a syntax error in Python 3

HTTPError: HTTP Error 500: Internal Server Error 

1 Ответ

0 голосов
/ 30 января 2019

Ошибка запускается из-за 2-го pd.read_html(url) в строке if pd.read_html(url)[0].empty:.Первый HTTPError обрабатывается try/except, во второй раз вы звоните по тому же URL-адресу, который не удался раньше, без защиты.

Во-вторых, из-за break errors будет только 1 запись.Я не уверен, что вы хотите сохранить все вышедшие из строя ULR или только те, которые находятся в цикле.

Попробуйте.

import datetime
import pandas as pd
from urllib.error import HTTPError

start = datetime.datetime.strptime("19-09-2016", "%d-%m-%Y")
end = datetime.datetime.strptime("31-12-2017", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)]

dates_list = []
for date in date_generated:
    txt = str(str(date.day) + '.' + str(date.month) + '.' + str(date.year))
    dates_list.append(txt)

ndf = pd.DataFrame()  # create empty ndf
for i in range(0, len(dates_list)):
    allURL = 'https://www.uzse.uz/trade1_results?date=' + dates_list[i] + '&locale=en&mkt_id=ALL&page=%d'
    errors = []

    for k in range(1, 100):
        url = allURL % k
        try:
            chunk = pd.read_html(url)[0]
            chunk['Date'] = dates_list[i]  # Date is positioned at last position, let's fix that
            cols = chunk.columns.tolist()  # get a list of all the columns
            cols = cols[-1:] + cols[:-1]  # rearrange the columns, move the last element (Date) to the first position
            chunk = chunk[cols]  # reorder the dataframe
            ndf = pd.concat([ndf, chunk])
        except HTTPError:
            errors.append(url)

    print(errors)
print(ndf)
...