一般 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 * :所有导入的类不需要添加限定。
部分参考百度知道