Python Socket编程报错:socket类无gethostbyname属性问题求助
错误产生原因
from socket import *属于全量导入,会将socket模块下的所有成员(包括socket类)直接导入当前命名空间,此时代码中使用的socket指向的是套接字类,而非socket模块本身。gethostbyname、gethostname是socket模块的顶层函数,不属于socket类的方法,因此调用socket.gethostbyname会触发属性不存在的异常。
修复方案
两种方案二选一即可:
方案1:调整导入方式,避免命名冲突
将导入语句修改为:import socket同时调整创建服务套接字的代码为:
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)后续调用模块方法都保持
socket.前缀即可正常运行。方案2:保留全量导入,直接调用已导入的函数
不需要修改导入语句,直接将报错的行修改为:ipadress=gethostbyname(gethostname())全量导入后函数已经直接暴露在当前命名空间,不需要加模块前缀。
其他代码问题提醒
你的代码还存在两处可修复的逻辑问题:
- 变量名拼写错误:你定义的变量是
ipadress,后续打印语句中写的是ipaddress,多了一个d,运行时会触发变量未定义错误。 - IP校验逻辑写反:当前代码判断
if subnetAdress+'\n' in permitList:时会拒绝访问,和预期的「允许列表内的IP访问」逻辑相反,应该修改为if subnetAdress+'\n' not in permitList:。
内容的提问来源于stack exchange,提问作者젤리야
相关产品推荐
相关产品推荐

