try块中变量的命名空间范围

eal*_*eon 2 python scope exception-handling python-2.7

关于这两个选项:

try:
    userid = get_userid()
except:
    userid = ""
Run Code Online (Sandbox Code Playgroud)

userid = ""
try:
    userid = get_userid()
except:
    pass
Run Code Online (Sandbox Code Playgroud)

是否有任何区别,特别想知道如果userid仅在try块中设置命名空间将如何工作?它们是否都具有相同的命名空间范围?

一个比另一个更受欢迎吗?

MSe*_*ert 7

像块tryexcept(也if,elif,else,with)没有"本地范围".但是,您不能也不应该期望try块中的任何代码都将被执行(因为它可能会失败并直接进入exceptfinally阻塞).

但你确定"""失败"是否user_id合理?为什么不是别的东西,例如None

你也应该避免捕获所有异常,所以我更喜欢这样的东西:

try:
    userid = get_userid()
except Exception:  # or a more specific exception
    userid = None
Run Code Online (Sandbox Code Playgroud)