首页 > 解决方案 > 无法在第一个 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')

标签: pythonpython-3.x

解决方案


好的,所以发生这种情况的原因是因为当

(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

如果您可以放弃这些行,定义sNone并签入 elif 以便如果 s 是None(这意味着尚未输入 if),请不要执行 elif。


推荐阅读