无法运行以下Python代码

时间:2017-09-22 20:41:49

标签: python

这个程序基本上是一个脚本,通过实际ping每个ip来扫描子网中的每个主机。 这是我的代码:

#!/usr/bin/python
import os 
global lis 
print("Scanning the Subnet : ")
subnet_input = '192.168.1.0'
subnet_input = subnet_input.split('.')
for x in range(0,255):
    subnet_input[3] = x
    str(subnet_input)
    new_sub = str(subnet_input[0])+'.'+str(subnet_input[1])+'.'+str(subnet_input[2])+'.'+str(subnet_input[3])
    res = os.system("ping -c 4 {}".format(new_sub))
    if res==0:
        print("{} is Alive".format(new_sub))
        str(new_sub)
        lis = lis + " " + new_sub
    else:
        continue
print("[*] ALL ALIVE HOSTS ARE  : ")
for i in lis:
    print(i)

错误是:

Traceback (most recent call last):
File "./Ping.py", line 16, in <module>
lis = lis + " " + new_sub
NameError: global name 'lis' is not defined

即使我声明了一个全局变量,它也会给我一个错误,说明该变量未定义

1 个答案:

答案 0 :(得分:2)

您误解了global语句的工作原理。

当你声明一个变量global时,告诉python它应该可以在任何地方访问。但是,您仍然需要给它一个值。

在您的代码中,您可以:

global lis

但是你永远不会为lis分配一个值。因此,当您尝试在此处访问它时:

lis = lis + " " + new_sub

你当然会得到一个NameError。 lis没有您可以访问的值。

要解决此问题,请将global lis替换为lis = ""。执行global lis 然后为其分配值也会有效。但是,由于示例中的所有内容似乎都在全局命名空间中,因此这是不必要的。