2014-06-11 254 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