Python 尝试除了最后

标签 python web2py try-catch-finally

看来我还不太了解异常处理。我不知所措:( 以下代码有时会返回此错误:

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/

相关文章:

python - 导入错误: No module named shutil_get_terminal_size

php - 各种 Python/PHP Web 框架的相对优势是什么(特别是对于我的项目)?

ios - Try-Catch 错误 Objective-C

python - 如何捕获 Fabric 中的身份验证错误并重试?

python - "static method object"和 "class method object"没有 "callable types"吗?

python - 如何限制 Python 线程?

web2py - 使用 web2py 调度程序运行 shell 脚本

java - 如果没有 catch block ,哪个异常处理程序将处理异常?

javascript - 最终 block 中的return语句

python - 为什么循环嵌套的顺序很重要python?