我有以下代码:
try:
connSock = socket(AF_INET, SOCK_STREAM)
connSock.connect((tgtHost, tgtPort))
except:
pass
finally:
connSock.close()
Pycharm 说:
Local variable 'connSock' might be referenced before assignment on connSock.close() line
这怎么可能?
我错过了什么吗?
更新:
如果您的操作系统用完描述符,socket() 函数可能会引发异常
请您参考如下方法:
如果第二行的 socket() 调用引发异常,则永远不会绑定(bind) connSock。
套接字可以用作上下文管理器,利用它来发挥你的优势:
try:
with socket(AF_INET, SOCK_STREAM) as connSock:
connSock.connect((tgtHost, tgtPort))
except socket.error:
pass
这将在 with block 退出时关闭套接字,而无需引用它,并且仅当 socket() 调用实际成功时。
请注意,您应该很少使用毯子except: pass。最好捕获特定的异常。
