2014-06-11 225 views
0

我在某些脚本中出现奇怪的错误。这些工作与上周一样,具有相同的代码。Python名称错误:名称未定义Linux

我的代码:

import ipaddress 
import csv 
from csv import DictReader, DictWriter 
import operator 
import time 
import os 
import datetime 
from datetime import datetime 

cnt=1 

FMT='%a %b %d %H:%M:%S %Y' 

start_time=str(time.strftime("%c", time.localtime())) 

forpth=r'/home/path/Geo_Assigned' 

forfiles=[os.path.join(forpth, fname) for fname in os.listdir(forpth)if fname.startswith('DC')] 
forlat=max(forfiles, key=os.path.getmtime) 

mskcmlst=['255.255.255.254', '255.255.255.252', '255.255.255.248', '255.255.255.240', '255.255.255.224', '255.255.255.192', '255.255.255.128', '255.255.255.0', '255.255.254.0', '255.255.252.0', '255.255.248.0', '255.255.240.0', '255.255.224.0', '255.255.192.0', '255.255.128.0', '255.255.0.0', '255.254.0.0', '255.252.0.0', '255.248.0.0', '255.240.0.0', '255.224.0.0', '255.192.0.0', '255.128.0.0', '255.0.0.0'] 


alphlst=[] 
WaitList=[] 

cmpmask=ipaddress.ip_address('255.255.255.254') 

msk32=ipaddress.ip_address('255.255.255.255') 

n=0 

with open(forlat, newline='') as fin: 

    read = DictReader(fin) 

    for line in read: 
     line['CIDR']=ipaddress.ip_network(line['CIDR']) 
     line['Mask']=line['CIDR'].netmask 
     lwmask=str(line['Mask']) 
     alphlst.append(line) 
     print(lwmask) 



print("This is lowest mask: {}".format(lwmask)) 

endnum=mskcmlst.index(lwmask)+1 

print("This is endnum {}".format(endnum)) 

而且我得到的错误:

File "Vtst-linux.py", line 46, in <module> 
    print("This is lowest mask: {}".format(lwmask)) 
NameError: name 'lwmask' is not defined 

我收到此错误的Linux操作系统Ubuntu版本的Python 3.4.1和3.4.0,但不能在Windows上使用相同的Python版本。我已经在Linux服务器上的虚拟环境中尝试了这一点,并从安装路径运行它,结果相同。输入文件基本上是CIDR表示法中的一堆IP网络。

任何帮助表示赞赏,我对此感到莫名其妙,我试图改变变量名称和其他的东西,它没有帮助。

+0

你的代码注定会失败,因为你定义'lwmask'的'for'循环不会被执行。你确定你使用非空文件作为输入吗? 'print(lwmask)'在linux上产生输出吗? – Bakuriu

+0

是的,就是这样。 – CircuitB0T

回答

1

变量lwmask未定义,您尝试使用它。

如果for line in read:循环不包含任何项目,并且定义lwmask的内部块未执行,则可能发生这种情况。

现在你应该研究,为什么它不包含任何行。

+0

不确定,但这不是python 3的范围问题吗?即lwmask在for循环之后离开作用域,不是吗? – GoingTharn

+0

@GoingTharn编号for循环不会创建本地作用域。 – chepner

+0

是的,该文件是空的。我以为我检查过了。谢谢! – CircuitB0T