Python 代码一旦放入函数中就不起作用

Python 代码一旦放入函数中就不起作用,python,function,io,Python,Function,Io,为什么下面的代码能按预期工作,但一旦放入函数中。它返回意外的结果 a_prm = [] folder = askdirectory() copy = False os.chdir(folder) for file in glob.glob("*.prm"): with open(file, 'r') as prm: if file[:3] == 'DBA': for line in prm: if '@ATTRI

为什么下面的代码能按预期工作,但一旦放入函数中。它返回意外的结果

a_prm = []

folder = askdirectory()
copy = False

os.chdir(folder)
for file in glob.glob("*.prm"):
    with open(file, 'r') as prm:
        if file[:3] == 'DBA':
            for line in prm:
                if '@ATTRIB_DETAIL' in line:
                    copy = True
                elif '@BITLIST_FILES' in line:
                    copy = False
                elif copy:
                    print(line.split()[1])
打印的结果是预期的

        if file[:3] == 'DBA':
            with open(file, 'r') as prm:
                for line in prm:
                    dimension_parse(line)

def dimensions_parse(line):
    flag = False

    if '@ATTRIB_DETAIL' in line:
        flag = True
    elif '@BITLIST_FILES' in line:
        flag = False
    elif flag:
        print(line.split()[1])

不返回任何内容

在第二个版本(在函数中)中,您正在将
标志
(又称
复制
)值重置为
False
,而不是在“无例程”版本中,您仅在开始时设置它


因此,如果第行中的“@ATTRIB_DETAIL”或第行中的“
elif”@BITLIST_FILES”都不满足,则行为是不同的。第二个版本中不会再现内存效应。

根据共享代码的不同,该错误可能是由使用后定义函数引起的。
函数应在使用前定义

修改代码

def dimensions_parse(line):
    flag = False

    if '@ATTRIB_DETAIL' in line:
        flag = True
    elif '@BITLIST_FILES' in line:
        flag = False
    elif flag:
        print(line.split()[1])

if file[:3] == 'DBA':
            with open(file, 'r') as prm:
                for line in prm:
                    dimension_parse(line)

同时共享错误,不返回任何内容。没有错误。那么什么是意外的呢?函数将不会返回,除非明确要求它返回。谢谢,我尝试了此操作,但发现列表索引超出范围错误/