在此代码中赋值之前引用的变量

Yet*_*tti 1 python

我有以下代码:

try:
    connSock = socket(AF_INET, SOCK_STREAM)
    connSock.connect((tgtHost, tgtPort))
except:
    pass
finally:
    connSock.close()
Run Code Online (Sandbox Code Playgroud)

Pycharm说:

在connSock.close()行上赋值之前,可能会引用局部变量'connSock'

这怎么可能呢?

我错过了什么吗?


更新:

如果您的操作系统用完描述符,socket()函数可能会引发异常

Mar*_*ers 7

如果socket()第二行上的调用引发异常,则connSock永远不会绑定.

套接字可以用作上下文管理器,使用它有利于您:

try:
    with socket(AF_INET, SOCK_STREAM) as connSock:
        connSock.connect((tgtHost, tgtPort))
except socket.error:
    pass
Run Code Online (Sandbox Code Playgroud)

这将在with退出块时关闭套接字,而不必引用它,并且仅在socket()调用实际成功时才关闭.

请注意,您应该很少使用毯子except: pass.更好地捕捉特定的例外.