首页 > 解决方案 > 如何在python的ELIF Block语句中使用IF Block语句的变量?

问题描述

运行此代码时,我收到错误“分配前引用的局部变量“文件””。我认为变量 Files 的范围仅限于 IF 块。有什么建议么?

import shutil
import os
import logging
import time
import re
timestr = '_'+time.strftime("%Y%m%d-%H%M%S")    
logging.basicConfig(filename = 
"//p4products//nemis2//filehandlerU//ENSUBAPP_log//ENSUBAPP.log"+timestr, level = logging.INFO, 
format = '%(asctime)s:%(levelname)s:%(message)s')
src_dict = "//p4products/nemis2" 
pattern = re.compile ("Ena3s5npf_g") 

def Search_String_File(src_dict,pattern):
   for x in os.listdir(src_dict): 
    print(x)
    if os.path.isfile(os.path.join(src_dict, x)):
        files = os.path.join(src_dict,x)
        strng = open(files) 
        for lines in strng.readlines(): 
            try:
                if re.search(pattern, lines): 
                    print (re.split(r'=', lines))
            except Exception as e:
                    print(e)
                    pass
    elif x != "ENSUBAPP_search.py":
        return Search_String_File(files,pattern)

Search_String_File(src_dict,pattern)      

标签: pythonif-statement

解决方案


我认为变量 Files 的范围仅限于 IF 块

这是正确的,所以将它移动到不同的范围(循环)

def search_string_file(src_dist, pattern):
    for x in os.listdir(src_dict): 
        print(x)
        child = os.path.join(src_dict,x)
        if os.path.isfile(child):
            with f as open(child):
                for line in f: 
                    try:
                        if re.search(pattern, line): 
                            print (re.split(r'=', line))
                    except Exception as e:
                        print(e)
        elif x != "ENSUBAPP_search.py":
            search_string_file(child, pattern)

注意:您可能想使用os.walkoros.glob代替listdir


推荐阅读