我是Python的新手,目前正在进行一些套接字开发。我不太确定Python套接字编程的最佳实践。
例如,在以下代码中,conn=None
行和finally
块是否必要?这种操作的最佳惯例是什么?
@post('/relay/')
def relay():
conn = None # Do I need this line to ensure conn not to be undefined?
try:
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(host_port)
conn.sendall(content)
except socket.error, se:
if se.errno == 61:
logger.error(...)
else:
logger.error(...)
abort(400, 'Error...')
finally: # Should this socket.close() task be in finally block? like Java?
if conn:
conn.shutdown(socket.SHUT_RDWR)
conn.close()
return ''
答案 0 :(得分:3)
finally
通常在您使用某种类型的连接(套接字,数据库等)时使用,该连接已打开,在try
和中进行操作,无论发生什么情况< / em>,应在之后关闭。
是的,conn.close()
应该放在finally
区块中。
至于conn=None
,这可能是必需的,但在你的情况下却不是。因为如果
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
失败,conn
永远不会被定义,它会跳转到finally
块(因为失败)。但是,您检查if conn=None
,以便它不会抱怨尝试关闭未定义的连接,因为跳过了if
。