python - 从容器中删除 blob 时如何在 python 中对 Azure PartialBatchErrorException 进行异常处理
问题描述
如何打印由于部分错误而尝试删除并失败的 blob?使用 Azure 库,(azure.storage.blob import BlobServiceClient)我试图从名称列表中删除 blob(如果存在)。
有时,在某些情况下,作为输入提供的名称列表没有具有该名称的 blob。在这些情况下,我们会得到“PartialBatchErrorException”。根据他们的文档,它有 3 个选项:PartialBatchErrorException(message, response, parts)
但是,如果我在一个列表中传递了 1000 个文件,那么使用它,我想知道哪个成功,哪个失败,坦率地说,我无论如何也看不到这个。这似乎是一个相当简单的问题,但不确定 exceptionClass 是否没有打印这个或者我是否遗漏了一些东西。
问题 2:很想看看是否有人有删除 blob 的并行方法。
rom 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("==============================")
这部分东西只有 status_code,例如,我无法看到他为哪个 blob 获得 404。
解决方案
部分回答您的问题。
但是,如果我在一个列表中传递了 1000 个文件,那么使用它,我想知道哪个成功,哪个失败,坦率地说,我无论如何也看不到这个。这似乎是一个相当简单的问题,但不确定 exceptionClass 是否没有打印这个或者我是否遗漏了一些东西。
考虑到part
本质上是一个类型的对象HttpClientTransportResponse
,您可以访问它的request
属性,然后访问该url
属性的request
属性以获取实际的 blob URL。
例如,您可以使用print("Blob: " + part.request.url)
它将以/container-name/blob-name
格式打印 blob 的 URL。
这是修改后的代码:
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:
print("Blob: " + part.request.url)
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("==============================")
推荐阅读
- python - 从字符串解析时间,从输入文件中读取(纯文本)
- excel - 宏只能手动运行
- maven - Google Cloud SDK App-Engine 项目优先级
- c# - 如果选择了过去的日期,则 ASP.NET Mvc 警告消息
- php - 在只读输入文本字段中显示 Woocommerce 订单元数据值
- laravel-5.7 - 试图获取非对象 Laravel 5.7 的属性“名字”
- javascript - 当汽车撞到画布上的轨道时发出警报
- facebook - 如何使用 Facebook 中的测试表单在 Web-hook 中检索潜在客户信息
- apache-kafka - Kafka Connect JDBC 在 JsonConverter 上失败
- java - Java while 函数仅每 1 秒