python - 无法在第一个 elif 块之外打印
问题描述
我正在扫描特定行的日志文件(在目录中),需要在文本文件中输出所有内容。
由于某种原因,我不明白,我有一个错误:
NameError: name 's' is not defined
我试图将 Var 分配s
给不同的 Var,但仍然无法解决问题。
在我的代码中,我将有一个“if”和 5 个“elif”,如下所示:
If
var1
elif
var2
elif
var3
elif
var4
elif
var5
elif
var6
write.output_file(var1+var2+var3+var4+var5+var6+'\n')
这是代码:
import os
import re
start_tm = '," Start Time'
test_ID = ' Host Name: '
cell_f = open('C:\\03\\OUTCOME.txt','w')
given_path = 'C:\\02\\en15\\TST2'
for filename in os.listdir(given_path):
filepath = os.path.join(given_path, filename)
if os.path.isfile(filepath):
#print("File Name: ", filename)
print("File Name\\Path:", filepath+'\n')
with open(filepath) as mfile:
for rn_l in mfile:
rn_l= rn_l.rstrip()
if start_tm in rn_l:
*extraWords,st_t1 = rn_l.split('Time') # Grtting Start Time #
s=str(st_t1)
s=s.replace('"','')
print ("Start String \"s\"is a TYPE ", type(s))
print ("START TIME STRING "+s)
elif test_ID in rn_l:
*extraWords,t_id1,t_id2, = rn_l.split( )
print ("TESTER ID --->>> "+t_id1)
t_id11,t_id12, = rn_l.split('Host')
*w,e,c,d = re.split(" +", t_id11)
cell = str(e+'_'+c)
cell = cell.replace('[','').replace(']','')
print ("Cell Line " + cell+'\n')
解决方案
好的,所以发生这种情况的原因是因为当
(start_tm in rn_l) == True
python会进入if语句,给s赋值。之后,python 忽略 elif 语句并退出 if 块并继续执行 if 之后的任何内容。
什么时候
(start_tm in rn_l) != True
python检查elif中的条件,如果该语句为True,
(test_ID in rn_1) == True
python不会进入if块,而是进入elif块,它不会给s赋值。这就是您收到 NameError 的原因
更正:
尽管上述解释是正确的,但它并没有解决 for 循环问题。只有在 if 之前输入 elif 时才会出现此错误。因为,如果python先输入if,那么应该有一个s
变量,但是如果python输入elif,它会抛出那个错误,因为之前没有输入if。
本质上,这是因为文件的第一行不能满足您的 if 语句。有几种方法可以处理这个问题。如果你不能保证start_tm in rn_l
文件的第一行是 True ,并且你仍然需要那些不满足的行,那么在进入 for 循环之前start_tm in rn_l
定义为空字符串或其他东西。s
如果您可以放弃这些行,定义s
为None
并签入 elif 以便如果 s 是None
(这意味着尚未输入 if),请不要执行 elif。
看
- 范围规则的简短描述?for python 处理范围(即:知道什么变量在哪里)以及变量何时再次超出范围。
推荐阅读
- javascript - 全部或部分在 TypeScript 中模拟类和接口
- c# - 如何在代码后面/ XAML中获取x:元素的名称
- python - 列表理解中的多个 if 条件
- mysql - How to use "ON UPDATE CASCADE" Correctly in MariaDB 10.1.37 / Ver 15.1?
- java - 简单的歌曲列表,使用数组列表和对象
- jquery - jQuery: Exclude the first and second columns that is VISIBLE
- mongodb - 仅从 mongoose 组/聚合操作返回原始文档
- objective-c - NSUndoManager is undoing all changes done during a mouseDrag with single Undo
- fullcalendar - fullcalendar events not displayed after next
- javascript - 在动态字段上触发 Enter