python函数的作用域_异常期间Python函数的局部变量作用域

背景:我正在用Python编写National Instruments测试台的COM编程。如果对象没有被正确地“释放”,TestStand会抱怨(它会弹出一个“对象没有正确释放”的调试对话框)。在Python中释放TestStand COM对象的方法是确保所有变量不再包含对象,例如del()它们,或者将它们设置为None。或者,只要变量是函数局部变量,当函数结束时,一旦变量超出范围,对象就会被释放。在

好吧,我在我的程序中遵循了这个规则,只要没有异常,我的程序就会正确地释放对象。但是如果我得到一个异常,那么我会从TestStand得到“objects not released”消息。这似乎表明,当发生异常时,函数局部变量通常不会超出范围。在

下面是一个简化的代码示例:class TestObject(object):

def __init__(self, name):

self.name = name

print("Init " + self.name)

def __del__(self):

print("Del " + self.name)

def test_func(parameter):

local_variable = parameter

try:

pass

# raise Exception("Test exception")

finally:

pass

# local_variable = None

# parameter = None

outer_object = TestObject('outer_object')

try:

inner_object = TestObject('inner_object')

try:

test_func(inner_object)

finally:

inner_object = None

finally:

outer_object = None

如图所示运行时,它显示了我的预期:

^{pr2}$

但是如果我取消了raise Exception...行的注释,我得到:Init outer_object

Init inner_object

Del outer_object

Traceback (most recent call last):

...

Exception: Test exception

Del inner_object

由于异常,inner_object被延迟删除。在

如果我取消了将parameter和local_variable都设置为None的行的注释,那么我得到了我期望的结果:Init outer_object

Init inner_object

Del inner_object

Del outer_object

Traceback (most recent call last):

...

Exception: Test exception

那么,当Python中发生异常时,函数局部变量到底会发生什么呢?它们是否被保存在某个地方,这样它们就不会像平常一样超出范围了?控制这种行为的“正确方法”是什么?在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值