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

使用Azure Python SDK创建资源时如何校验是否创建成功?

Azure Python SDK LROPoller资源创建校验最优方案

三种方案中方案2为最优选择,结合官方异常体系做适配即可实现最安全规范的校验,无需手动实现轮询或状态判断逻辑。


各方案优劣对比

  • 方案1:属于重复造轮子的冗余实现,done()仅能判断操作是否结束,无法区分操作是成功结束还是失败结束,自定义的轮询计数逻辑容易出现超时时间不合理、漏处理异常状态的问题,且SDK内部已经做了符合Azure服务规范的轮询间隔优化,完全不需要自行实现。
  • 方案3:wait()仅会等待操作执行结束,不会主动判断操作结果是成功还是失败,手动校验状态的逻辑容易遗漏枚举值,后续SDK更新状态枚举后还需要同步修改判断逻辑,维护成本高。
  • 方案2:result()是官方推荐的标准用法,天然具备以下优势:
    1. 内部自动实现轮询逻辑,会按照服务端返回的建议间隔查询状态,效率高于自定义实现
    2. 资源创建失败(权限不足、参数错误、配额不够等场景)时会主动抛出对应异常,无需手动判断状态
    3. 支持直接传入超时参数,超时会自动抛出TimeoutError,无需自行实现计数逻辑
      示例中的isinstance判断属于冗余逻辑,只要result()正常返回无异常,就已经是对应资源的实例对象,仅特殊业务校验场景需要加该判断。

更规范的实现代码

from azure.core.exceptions import HttpResponseError, TimeoutError

try:
    poller = client.virtual_machines.begin_create_or_update(...)
    # 传入超时时间(单位为秒),成功直接返回虚拟机实例,失败自动抛异常
    vm = poller.result(timeout=300)
    # 如有额外业务校验需求,可追加判断预配状态
    if vm.provisioning_state != "Succeeded":
        raise ValueError(f"虚拟机预配状态异常: {vm.provisioning_state}")
    # 后续业务逻辑
except HttpResponseError as e:
    # 处理资源创建失败场景
    print(f"资源创建失败: {e.message}")
except TimeoutError:
    # 处理超时场景,可按需选择取消操作或延长超时时间
    print("资源创建超时")
except Exception as e:
    # 其他异常兜底处理
    print(f"未知错误: {str(e)}

如果是不需要等待资源创建完成的异步场景,可以使用done()做非阻塞的状态判断;如果需要确认资源创建成功再执行后续逻辑,直接调用result()是最简单安全的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:45:02