Skip to main content
 首页 » 编程设计

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

2025年05月04日9zhenyulu

我有以下代码:

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。最好捕获特定的异常。