如何解决处理 Python 中 Azure Blob 删除客户端中 Blob 不存在场景的异常
我在容器中有数千个 blob,并且从某个数据库中提取了要删除的 blob 列表。
现在,不能保证列表中存在的 id/name 存在于 blob 中。所以想要做一个 deleteIfExist 类型的场景和
当 blob 不存在时它抛出的错误不是:azure.core.exceptions.ResourceNotFoundError:我可以为其编写异常块的操作。
它抛出一些通用的东西,比如:azure.storage.blob._shared.response_handlers.PartialBatchErrorException:批处理操作中出现部分失败。
以下代码:
from azure.storage.blob import BlobServiceClient
blob_service_client = BlobServiceClient.from_connection_string(conn_str_for_list)
container="name1-entity"
# Instantiate a ContainerClient
container_client = blob_service_client.get_container_client(container)
file_name = "something.txt"
fileobj = open(file_name,"r")
entityIdsList = [line.rstrip() for line in fileobj]
fileobj.close()
blobs_list = entitysChunk
print(blobs_list)
blobs_length = len(blobs_list)
# container_client.delete_blobs(*blobs_list)
if blobs_length <= 256:
container_client.delete_blobs(*blobs_list)
else:
start = 0
end = 256
while end <= blobs_length:
# each time,delete 256 blobs at most
container_client.delete_blobs(*blobs_list[start:end])
start = start + 256
end = end + 256
if start < blobs_length and end > blobs_length:
container_client.delete_blobs(*blobs_list[start:blobs_length])
解决方法
看看下面的代码:
from azure.storage.blob import BlobServiceClient,PartialBatchErrorException
conn_str_for_list = "connection-string"
blob_service_client = BlobServiceClient.from_connection_string(conn_str_for_list)
container="blob-container-name"
container_client = blob_service_client.get_container_client(container)
file_name = "blobs.txt"
fileobj = open(file_name,"r")
entityIdsList = [line.rstrip() for line in fileobj]
fileobj.close()
blobs_list = entityIdsList
print(blobs_list)
try:
result = container_client.delete_blobs(*blobs_list)
for item in result:
print(item.status_code)
except PartialBatchErrorException as e:
print(e.message)
print("-----------------------")
print(e.response)
print("-----------------------")
print(e.parts)
print("-----------------------")
for part in e.parts:
if (part.status_code == 202):
print("Blob delete request was accepted.")
elif (part.status_code == 404):
print("Blob does not exist. Consider it deleted.")
else:
print("Something else happened. You better take a look at it.")
print(part)
print("==============================")
本质上,每当出现 PartialBatchErrorException
类型的异常时,它的 parts
属性都会包含批处理中每个操作的结果的详细信息。您可以检查每个操作的状态代码以确定它是成功 (status code 202
) 还是失败 (other status code
)。如果状态代码为 404 (Not Found)
,则可以假设 blob 不存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。