关于这两个选项:
try:
userid = get_userid()
except:
userid = ""
VS
userid = ""
try:
userid = get_userid()
except:
pass
是否存在任何差异,特别想知道如果仅在userid
块中设置try
,命名空间将如何工作?它们是否都具有相同的命名空间范围?
是一个优先于另一个吗?
答案 0 :(得分:6)
try
和except
(以及if
,elif
,else
,with
)之类的广告块没有"本地范围&#34 ;.但是,您无法并且不应该期望try
块中的任何代码都会被执行(因为它可能会失败并直接进入except
或finally
块)。
但你确定""
为"失败" user_id
有道理吗?为什么不是别的,例如None
?
此外,你应该避免捕获所有异常,所以我更喜欢这样的东西:
try:
userid = get_userid()
except Exception: # or a more specific exception
userid = None
答案 1 :(得分:1)
您可以使用locals()
查看每种情况下定义的变量。没有区别。
答案 2 :(得分:1)
执行你给出的两个陈述后,结果状态没有区别。
如果在第二个中省略userid=""
,如果发生错误,变量将导致未定义。
第一个语句应该是首选的,因为它是(a)更好,(b)更快(如果没有错误发生,userid
获得两次赋值的值。)