报错name ‘AF_INET‘ is not defined。/TypeError: ‘module‘ object is not callable

一般 name ‘xxx’ is not defined的意思是xxx没有定义,很可能是使用变量前没有定义,或者在全局引用了局部变量等等。
这里我们是参考python核心编程中的tsTserv3.py或tsTserv.py文件,
其中报错提示如下:
8 ADDR = (HOST,PORT)
9
—> 10 tcpSerSock=socket(AF_INET,SOCK_STREAM) #AF_INET即Ipv4
11 tcpSerSock.bind(ADDR)
12 tcpSerSock.listen(5)

NameError: name ‘AF_INET’ is not defined
或者如下:
8 ADDR = (HOST,PORT)
9
—> 10 tcpSerSock=socket(AF_INET,SOCK_STREAM)
11 tcpSerSock.bind(ADDR)
12 tcpSerSock.listen(5)

TypeError: ‘module’ object is not callable
这里很可能是将第一句写成了import socket,改为from socket import *即可,完整代码如下:

#import socket
from socket import *
from time import *

HOST = ''
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)

tcpSerSock=socket(AF_INET,SOCK_STREAM)  #AF_INET即Ipv4
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
    print('waiting for connection...')
    tcpCliSock,addr = tcpSerSock.accept()
    print('...connect from:',addr)
    while True:
        data = tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send('[%s] %s' %(bytes(ctime(), 'utf-8'),data))
        
    tcpCliSock.close()
tcpSerSock.close()
        

查资料了解到这两者区别挺大
在这里 import 和 form xx import *的区别:
     主要是针对socket模块的
      import socket 的话 要用socket.AF_INET 会报错 说是没有AF_INET这个族 是因为 AF-INET这个值在socket的名称空间下 from socket import * 是把socket下的所有名字引入当前的名称空间.

一首先作用上:
import:可以修改对象属性,无论对象是否可变。
from xx import *:只能修改模块对象是可变类型,不可变类型不能修改。
二用法上不同:
1、import:import xx,以import time和创建的一个python类为例:调用time模块中的方法时,需要在前加上time.;而调用类中的方法时,也需要在前面加上实例名aa。
2、 from XX import * :使用这种方式,则可以直接调用。

例如,正确运行如下图所示:在这里插入图片描述
三特点不同
1、import:所有导入的类使用时需加上模块名的限定。
2、 from XX import * :所有导入的类不需要添加限定。
部分参考百度知道

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值