nia*_*loc 0 python try-finally
def connect(self):
ok = False
try:
conn = ftplib.FTP(self.hostname, self.user, self.password)
ok = True
return conn
finally:
if not ok:
logging.error('Failed to connect to %s for %s' % (self.hostname, self.user))
Run Code Online (Sandbox Code Playgroud)
我假设如果在finally块中发生了某些事情,那么在try块内返回并不是一个好主意.我只是想确定执行的顺序,然后才会抨击某人的头!
我假设如果在finally块中发生了某些事情,那么在try块内返回并不是一个好主意.
你错了.的整点finally是,它总是会发生,即使你return或break早或引发未处理的异常.*和它发生后的return**.
这在文档中的try语句下进行了解释......但这并不是文档中最适合新手的部分.
话虽如此,你似乎正在使用一个finally块来伪造一个except块.不要使用您在finally时间检查是否存在异常的标志,而是使用异常本身告诉您存在异常:
def connect(self):
try:
conn = ftplib.FTP(self.hostname, self.user, self.password)
return conn
except Exception as e:
logging.error('Failed to connect to %s for %s' % (self.hostname, self.user))
raise
Run Code Online (Sandbox Code Playgroud)
*"永远"只是在极限范围内才真实.如果你的程序调用一些C代码来解析翻译器,或者你明确地调用_exit,或者有人在程序中间拔出电源线,那么finally代码显然不会运行.
**可能更准确地说它发生在中间return,但我认为这只会增加混乱; 除非你真的在解释翻译的胆量,否则你可以把它想象return成一个步骤.
| 归档时间: |
|
| 查看次数: |
2495 次 |
| 最近记录: |