为什么我能够从 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
一样。
这是一些 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
一样。