You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何打印并遍历azure.core.paging.ItemPaged类型对象?

如何正确遍历Azure Confidential Ledger的ItemPaged对象?

问题背景

调用Azure Confidential Ledger接口的代码如下:

from azure.confidentialledger import ConfidentialLedgerClient
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
from azure.identity import DefaultAzureCredential

identity_client = ConfidentialLedgerCertificateClient()
network_identity = identity_client.get_ledger_identity(
    ledger_id="MyLedger"
)

ledger_tls_cert_file_name = "ledger_certificate.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
    cert_file.write(network_identity["ledgerTlsCertificate"])

credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
    endpoint="https://MyLedger.confidential-ledger.azure.com",
    credential=credential,
    ledger_certificate_path=ledger_tls_cert_file_name
)

d = ledger_client.list_ledger_entries()

print(d)

执行print(d)后输出:

<iterator object azure.core.paging.ItemPaged at 0x18377142a90>

尝试遍历该对象时出现错误:

File "test.py", line 62, in <module>
    for i, r in enumerate(d_backup):
  File "C:\Users\Administrator\.venv\lib\site-packages\azure\core\paging.py", line 128, in __next__
    return next(self._page_iterator)
  File "C:\Users\Administrator\.venv\lib\site-packages\azure\core\paging.py", line 76, in __next__
    self._response = self._get_next(self.continuation_token)

解决方法

1. 基础遍历方式

ItemPaged是Azure SDK的分页迭代器,直接用for循环遍历即可,同时可按需提取条目字段:

d = ledger_client.list_ledger_entries()

# 遍历所有账本条目
for entry in d:
    # 打印条目核心信息,可根据需求调整字段
    print(f"交易ID: {entry.transaction_id}, 内容: {entry.contents}")

2. 分页控制与异常捕获

若需要手动控制分页逻辑,或排查请求错误,可使用by_page()方法并添加异常捕获:

from azure.core.exceptions import HttpResponseError

try:
    d = ledger_client.list_ledger_entries()
    # 逐页遍历条目
    for page in d.by_page():
        for entry in page:
            print(f"条目详情: {entry}")
except HttpResponseError as e:
    print(f"请求错误: {e.message}")
    # 打印详细错误信息(若有)
    if e.response:
        print(f"错误响应: {e.response.text()}")

3. 转换为列表批量查看

如果账本条目数量较少,可直接将迭代器转为列表一次性查看:

entries_list = list(d)
# 打印所有条目
print(entries_list)
# 或逐个打印带索引的条目
for idx, entry in enumerate(entries_list):
    print(f"第{idx+1}条: {entry}")

常见错误排查

  • 确认DefaultAzureCredential已正确配置,当前身份(用户/服务主体)拥有该Confidential Ledger的访问权限(如ConfidentialLedgerReader角色)。
  • 检查ledger端点、ID是否正确,确保ledger_certificate.pem文件生成正常且路径无误。
  • 若遍历仍报错,查看完整错误栈,确认是认证失败、网络问题还是ledger配置异常。

内容的提问来源于stack exchange,提问作者OmT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 03:10:30