看来我还不太了解异常处理。我不知所措:( 以下代码有时会返回此错误:
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
...
谢谢楼主
最佳答案
您的代码并不总是为状态分配某些内容。我可以看到几种可能无法分配状态的方式,我在下面突出显示了它们:
try:
server_url = self._get_pingback_server(target)
except PingbackClientError, e:
# If evaluating `e.message` raises an exception then status is not set.
status = e.message # <--- here
else:
try:
# If either of these two lines fails with something other than
# xmlrcplib.Fault, then status is not set.
server = xmlrpclib.ServerProxy(server_url) # <--- here
status = server.pingback.ping(self.source, target) # <--- here
# If xmlrpclib.Fault is not defined status is not set.
except xmlrpclib.Fault, e: # <--- here
status = e
finally:
db(table.id==id_).update(status=status)
我怀疑错误最有可能发生在内部 try block 中,您只捕获 xmlrpclib.Fault
而不是其他类型的异常。
关于Python 尝试除了最后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477332/