Код для перечисления объектов в ведре в boto3 выдает ошибку при попытке перебрать пагинаторPython

Программы на Python
Ответить
Anonymous
 Код для перечисления объектов в ведре в boto3 выдает ошибку при попытке перебрать пагинатор

Сообщение Anonymous »

Внезапно этот код Python, работающий в RedHat Linux 8.10 с Python версии 3.12.11 и последней версией Boto3 1.42.24 и botocore 1.42.24, выдает ошибки, которые я не понимаю. Все работало нормально, но по какой-то причине я не могу найти ведро. Интересно, есть ли у кого-нибудь идеи, почему ведро не найдено?
# these are two functions that I use

def create_iterator(s3_client,bname):
# create a paginator (without this the maximum number of objects returned is 1000)
try:
paginator = s3_client.get_paginator('list_objects_v2')
except ClientError as e:
print(f"Error creating list_objects_v2 paginator: {e}")
sys.exit(1)

# create a page iterator which returns a page of objects at a time (up to 1000 objects per page)
try:
page_iterator = paginator.paginate(Bucket=bname)
except ClientError as e:
print(f"Error creating pageinate for bucket {bname}: {e}")
sys.exit(1)

def print_objectlist(s3_client,bname,format):
piterator = create_iterator(s3_client,bname)
objcnt=0
for page in piterator:
# assign the Contents array of objects to the objarray variable for this page
objarray=page['Contents']
for obj in objarray:
objcnt += 1
print(f' {obj["Key"]}')

В моем коде main() я вызываю указанную выше функцию print_objectlist и передаю параметры, как ожидалось. Например:
def main():
import sys

# a bunch of code here that establishes the s3_client validates the values
# in the BNAME and OFORMAT variables

print_objectlist(s3_client, BNAME, OFORMAT)

Этот код отлично работает на моем Macbook с Python 3.13.1 и теми же версиями boto3 и botocore, которые установлены в Red Hat, но когда я пытаюсь запустить его в RedHat Linux 8.0, он выдает ошибки, показанные ниже.
Похоже, что ошибка выдается, когда я пытаюсь перебрать питератор (для страницы в питаторе :). Я знаю, что BNAME, который я передаю в качестве параметра, существует. Часть кода, проверяющая параметр BNAME, сначала выполняет вызов list_buckets для s3_client и проверяет возвращенный список на соответствие переменной BNAME, чтобы убедиться в его корректности.
Я ожидаю, что если имя сегмента будет неправильным, то блок try: .... кроме: с page_iterator = paginator.paginate(Bucket=bname) завершится неудачей, но вместо этого создастся page_iterator, и коды терпят неудачу, когда я пытаюсь перебрать переменную page_iterator. Вот обратная трассировка, когда я запускаю код:
Traceback (most recent call last):
File "/ascldap/users/jsebast/9737_Knowledge_Systems/Projects/RDMIP/ECS/ecs_python_scripts/list_objects_in_ecs_bucket.py", line 244, in
main()
^^^^^^
File "/ascldap/users/jsebast/9737_Knowledge_Systems/Projects/RDMIP/ECS/ecs_python_scripts/list_objects_in_ecs_bucket.py", line 238, in main
print_objectlist(s3_client, BNAME, OFORMAT)
File "/ascldap/users/jsebast/9737_Knowledge_Systems/Projects/RDMIP/ECS/ecs_python_scripts/list_objects_in_ecs_bucket.py", line 82, in print_objectlist
for page in piterator:
^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/paginate.py", line 272, in __iter__
response = self._make_request(current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/paginate.py", line 360, in _make_request
return self._method(**current_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/client.py", line 602, in _api_call
return self._make_api_call(operation_name, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/context.py", line 123, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/ascldap/users/jsebast/.local/lib/python3.12/site-packages/botocore/client.py", line 1078, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.errorfactory.NoSuchBucket: An error occurred (NoSuchBucket) when calling the ListObjectsV2 operation: The specified bucket does not exist.


Подробнее здесь: https://stackoverflow.com/questions/798 ... te-over-pa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»