ConvertFile函数中满足条件的if语句未执行的技术求助
问题排查
- errorHandle函数的致命错误:遍历
FileRead时,先将line从字符串转为列表(line = line.split('"')),随后调用FileRead.index(line)试图在字符串列表中查找列表元素,这会直接抛出ValueError。如果你的代码没报错,说明if func in commands分支根本没执行,大概率是原文件中func带有空格、换行符等不可见字符,导致func in commands不成立。 - 遍历列表时修改原列表的风险:即便上述错误修复,直接在
for line in FileRead循环中调用FileRead.remove()会导致迭代器跳过部分元素——因为列表长度动态变化,迭代器是基于初始列表生成的。 - convertFile中的匹配失效:如果
func输出显示为print但if func == "print"未触发,说明func包含不可见字符(如换行、空格),比如原line是"print\n",split后lineSplitted[0]是"print\n",lower()后仍与"print"不相等。
解决方案
修复errorHandle函数
放弃遍历修改原列表的方式,改用生成新列表过滤元素,同时避免类型错误:
import re def errorHandle(file: str) -> list: with open(file) as f: content = f.read() # 按引号和换行分割,同时过滤空字符串和纯空白的元素 FileRead = [part for part in re.split('["\n]', content) if part.strip()] commands = {"print"} # 用集合提升查找效率 # 生成过滤后的新列表 filtered = [] for part in FileRead: if part not in commands: filtered.append(part) return filtered
修复convertFile中的匹配逻辑
添加strip()去除不可见字符,同时优化文件名和后缀判断逻辑:
def convertFile(ConvertFile: str): # 用endswith判断后缀,避免文件名含多个点的情况(如test.v1.mar) if not ConvertFile.endswith('.mar'): raise WrongFileExtensionException() # 提取纯文件名(忽略路径) pure_filename = ConvertFile.split('/')[-1].split('.')[0] output_path = f"{pure_filename}.py" FileRead = errorHandle(ConvertFile) for line in FileRead: lineSplitted = line.split('"') func = lineSplitted[0].lower().strip() # 去除首尾空白字符 print(func) if func == "print": print("TRUE") with open(output_path, 'w') as Converted: # 按行写入,保证内容可读性 Converted.write('\n'.join(FileRead))
额外优化说明
- 后缀判断改用
endswith('.mar'),适配包含多个点的文件名。 - 提取文件名时先截断路径部分,避免路径中的斜杠干扰后缀分割。
- 写入文件时用
'\n'.join()将元素按行输出,避免内容挤在一起。
内容的提问来源于stack exchange,提问作者Panda
相关产品推荐
相关产品推荐

