为什么我能够从 try-catch 外部访问在 Python 中的 try-except 中定义的变量?

Why am I able to access a variable that was defined in a try-except in Python from outside the try-catch?

这是一些 Python 代码的示例:

try:
    x = l[4]
except Exception as e:
    x = 7
    
print(x)

我想知道,我可以访问 x 的原因是什么?我认为我需要执行以下操作:

# Define x
x = ''
try:
    x = l[4]
except Exception as e:
    x = 7
    
print(x)

但出于某种原因,Python 不需要那样做?这是一个范围界定的事情吗?

这是一个范围界定的东西,或者更确切地说,缺乏范围。 Python 没有块作用域;在 Python 中唯一定义新范围的是函数定义。 (推导式也是如此,但那是因为它们是使用匿名函数实现的。)

try块或except块中都没有“本地”x;两者都与 try 语句之前定义的 x 相同。

一个例外:e 一种本地的。它仍然在与 x 相同的范围内,但是一旦它完成以避免引用循环,它就会被 try 语句取消设置,就像您在语句之后立即写入 del e 一样。