它看起来像我没有很好的异常处理呢。我茫然:( 下面的代码有时会返回此错误:Python尝试除了最后
File "applications/pingback/modules/plugin_h_pingback.py", line 190, in ping
db(table.id==id_).update(status=status)
UnboundLocalError: local variable 'status' referenced before assignment
我希望status
总是被分配一个值,难道是因为一些其他的异常被抛出(或许在内心try
)和finally
掩盖呢?
...
try:
server_url = self._get_pingback_server(target)
except PingbackClientError, e:
status = e.message
else:
try:
server = xmlrpclib.ServerProxy(server_url)
status = server.pingback.ping(self.source, target)
except xmlrpclib.Fault, e:
status = e
finally:
db(table.id==id_).update(status=status) # <-- UnboundLocalError
...
感谢,HC
感谢马克。因此,如果finally块自身失败,那么finally会有效地隐藏try块中其他地方引发的未捕获异常,因为它的块总是被执行? – hcvst 2010-12-18 09:03:06
“隐藏”意思是暂时拦截它,然后只有当finally块没有自己的异常提升时才转发它。 – 2010-12-18 17:47:42