比如:
def f1():
conn = mysql.conn(host='12')
try:
pass
finally:
conn.close()
def f2():
try:
conn = mysql.conn(host='12')
pass
finally:
conn.close()
def f3():
try:
conn = mysql.conn(host='12')
pass
finally:
if conn:
conn.close()
注意,这里的 conn 可能会出现错误。
我认为应该像 f3 那样写,
那么是不是需要在 try 的外面初始化下 conn
类似的还有多线程编程里获取一个锁,释放一个锁操作, try 外还是 try 内哪个好?
谢。
1
phx13ye 2016-09-08 10:35:14 +08:00
是的,还可以用 with
|
2
scipio 2016-09-08 11:34:24 +08:00
如果是数据库连接这样的,建议用 with 。
|
3
lcj2class 2016-09-08 11:49:40 +08:00
connector-python 是这么做的:
``` try: cnx = mysql.connector.connect(user='scott', database='testt') except mysql.connector.Error as err: print(err) else: cnx.close() ``` connect 肯定是在 try 内获取的 |
4
suueyoung 2016-09-08 13:57:38 +08:00
|
5
wizardforcel 2016-09-08 14:15:14 +08:00 via Android
锁的话必然是 f1 。
实际上 java 的 sync 语句反编译之后你会发现,它 monitor-enter 是在 try 前面, monitor-exit 是在 finally 里面。 |
6
JhOOOn OP @phx13ye
谢谢 @lcj2class 这里我理解 try 语句里就只有 connection 操作, 其他操作放到 else 中是吗? @wizardforcel 多谢, 这里为什么锁放在 try 外面呢?不是很理解,如果放在 try 里面会出现什么问题呢? |
7
wizardforcel 2016-09-08 14:54:05 +08:00 via Android
|
8
lcj2class 2016-09-08 22:55:03 +08:00
想了想,用 else 的方式也不是很好,还是用 f1 的方式好些。具体可以参考: http://stackoverflow.com/a/2837877/2163429
|
9
TaMud 2016-09-09 01:02:46 +08:00
if conn is not None:
conn.close() |