Для l oop повторяется только один объект из списка с использованием python - PullRequest
0 голосов
/ 17 июня 2020

Для l oop итерация только одного объекта из списка, предоставленного функцией. Ниже приведены журналы кода и терминала.

Примечание: - Я хочу удалить оба URL-адреса, которые являются частью приведенного ниже списка.

функция delete_index_url() вывод выглядит следующим образом: -

['https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.13', 'https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.16']
def clean_index( ):
  delete_urls = delete_index_url()    # above function output assign to variable
  for i in delete_urls:
        print(i)   <-- this only print "https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.13"
        try:
          req = requests.delete(i)
        except requests.exceptions.ConnectionError as e:
            print ('ERROR: Not able to connect to URL')
            return 0
        except requests.exceptions.Timeout as e:
            print ('ERROR: ElasticSearch time out')
            return 0
        except requests.exceptions.HTTPError as e:
            print ('ERROR: HTTP error')
            return 0
        else:
            print ('INFO: ElasticSearch response status code was %s' % req.status_code)

            if req.status_code != 200:
               return 0
            else:
               return 1

print(clean_index())

Вывод журнала из сценария python: -

INFO: Sorting indexes
['https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.13', 'https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.16']
INFO: Getting a list of indexes
INFO: ElasticSearch response status code was 200
INFO: Found 200 indexes
INFO: Sorting indexes
https://vpc.xxx.es.amazonaws.com/staging-logs-2019.09.13  # only 2019.09.13, not 2019.09.16 logs URLs

1 Ответ

1 голос
/ 17 июня 2020

Вместо того, чтобы возвращать 0 or 1 и сразу же завершать функцию, вы можете создать список, сохранить ответы и вернуть его:

def clean_index( ):
  responses = []
  delete_urls = delete_index_url()    # above function output assign to variable
  for i in delete_urls:
        print(i)   
        try:
          req = requests.delete(i)
        except requests.exceptions.ConnectionError as e:
            print ('ERROR: Not able to connect to URL')
            responses.append(0)
        except requests.exceptions.Timeout as e:
            print ('ERROR: ElasticSearch time out')
            responses.append(0)
        except requests.exceptions.HTTPError as e:
            print ('ERROR: HTTP error')
            responses.append(0)
        else:
            print ('INFO: ElasticSearch response status code was %s' % req.status_code)
            if req.status_code != 200:
               responses.append(0)
            else:
               responses.append(1)
    return responses
print(clean_index())
...