代码之家  ›  专栏  ›  技术社区  ›  Vladimir Mihailenco

Python:捕获特定异常

  •  3
  • Vladimir Mihailenco  · 技术社区  · 14 年前

    try:
        yt_service.UpgradeToSessionToken() // this line produces TokenUpgradeFailed
    except gdata.service.TokenUpgradeFailed:
        return HttpResponseRedirect(auth_sub_url()) # this line will never be executed (why?)
    except Exception, exc:
        return HttpResponseRedirect(auth_sub_url()) # instead this line is executed (why?)
    

    所以我在最后一行设置断点,在调试器下我看到:

    "exc"   TokenUpgradeFailed: {'status': 403, 'body': 'html stripped', 'reason': 'Non 200 response on upgrade'}   
    "type(exc)" type: <class 'gdata.service.TokenUpgradeFailed'>
    "exc is gdata.service.TokenUpgradeFailed"   bool: False 
    "exc.__class__" type: <class 'gdata.service.TokenUpgradeFailed'>
    "isinstance(exc, gdata.service.TokenUpgradeFailed)" bool: False 
    "exc.__class__.__name__"    str: TokenUpgradeFailed 
    

    python异常处理中遗漏了什么?为什么存在(exc,gdata.service.TokenUpgradeFailed失败)是假的吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Rakis    14 年前

    如果您的相对/绝对 import

    可能还有其他原因导致错误,但我建议您仔细检查代码并确保 gdata.service gdata 包裹。即使是在 包本身,每个模块使用 service 模块应该通过 from gdata import service 而不是通过相对进口: import service