如何打印并遍历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
相关产品推荐
相关产品推荐

