无法在第一个elif块外打印

2024-04-27 08:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在扫描特定行的日志文件(在目录中),需要在文本文件中输出所有内容

出于某种原因,我不明白,我有一个错误:

NameError: name 's' is not defined

我试图将Vars分配给另一个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')

Tags: pathnameinidiftimeoscell
1条回答
网友
1楼 · 发布于 2024-04-27 08:12:59

发生这种情况的原因是因为

(start_tm in rn_l) == True

python将输入if语句,该语句将为s赋值。在此之后,python忽略elif语句并退出if块并继续执行if后面的任何语句

什么时候

(start_tm in rn_l) != True 

python检查elif中的条件,如果该语句为真

(test_ID in rn_1) == True

python不会输入if块,而是输入elif块,它不会给s赋值。这就是为什么你会犯名字错误


更正:

尽管上面的解释是正确的,但它并没有解决for循环问题。只有在if之前输入elif时,才会发生此错误。因为,如果python首先输入if,那么应该有一个s变量,但是如果python输入elif,它将抛出该错误,因为if之前没有输入

本质上,这是因为文件的第一行不能满足if语句。有几种方法可以解决这个问题。如果不能保证文件的第一行start_tm in rn_l为True,并且仍然需要那些不满足start_tm in rn_l的行,请在输入for循环之前将s定义为空字符串或其他内容

如果您可以舍弃这些行,那么将s定义为None,并签入elif,以便如果s是None(这意味着尚未输入If),则不执行elif

相关问题 更多 >