Python NameError: 名称未定义 Linux

0 投票
1 回答
2299 浏览
提问于 2025-04-18 09:27

我在一些脚本上遇到了奇怪的错误。这些代码上周还好好的。

我的代码:

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网络。

任何帮助都很感激,我对此感到困惑,我尝试过更改变量名和其他方法,但都没有用。

1 个回答

2

你使用了一个叫 lwmask 的变量,但它并没有被定义。

这种情况可能发生在 for line in read: 这个循环里没有任何内容的时候,这样里面用来定义 lwmask 的代码就不会被执行。

现在你需要去查一下,为什么这个循环里没有任何行。

撰写回答