Python 3.x 为什么输出是;p未定义“;?
我得到:Python 3.x 为什么输出是;p未定义“;?,python-3.x,Python 3.x,我得到: import socket # Import socket module s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Create a socket object host = socket.gethostbyname("www.itsecgames.com") global port for port in range(0,1): try :
import socket # Import socket module
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # Create a
socket object
host = socket.gethostbyname("www.itsecgames.com")
global port
for port in range(0,1):
try :
connect = s.connect((host,port))
print("Port [",port,"] : Connection accepted.")
global p
p = port
except :
print("Port [",port,"] : Connection refused.")
w = p
print(w)
这个问题只能重现 这是因为,在这种情况下,您从未设置
p
。由于您从未设置过p
,并且在您这样做之前它不存在于全局范围中,w=p
是无效的
考虑给它一些初始值,或者跳过整个w
过程,除非建立了连接
具体来说,在这种情况下,
connect
调用抛出的原因是您试图连接到端口0上的网站。HTTP网页通常可以在端口80上访问。全局变量在这里是不相关的,通常在Python中应该避免。在简化的示例中,我们可以清楚地看到,除了零件p未定义外:
w = p
NameError: name 'p' is not defined
治疗方法很简单:
global port
for port in range(0, 1):
try:
#global p
0 / 0
p = port
except:
print("Port [",port,"] : Connection refused.")
w = p
print(w)
在循环之前
更多说明:范围(0,1)只产生一个值。p=端口从未有机会运行过?我怀疑是否需要套接字来重现这一点。构建a。如果将
全局端口
子句修复为全局端口,p
,会发生什么?这不是完整的输出。在删除0/0后,请尝试我的答案中的示例-您将看到模块级别的代码将起作用。所以这里的外部范围论点不成立。为什么?这是(a)除被击中之外的的原因,以及(b)导致投诉错误的原因。你还想要什么?
p = None