使用变量路径调用open()打开文件失败,直接写入路径可正常运行
问题分析与解决
核心问题
程序崩溃(退出码0xC0000409)的根源是拖拽获取的路径被错误添加了单引号。从输出可见,path变量的值是'C:/Users/ahmet/OneDrive/Masaüstü/G-code Fix/bum.txt'——这个字符串包含首尾单引号,而实际文件路径并不带这些引号,用带引号的路径调用open()时,系统找不到对应文件,直接触发崩溃。
导致该问题的代码是:
path = str(files).replace('[','').replace(']','')
files是包含文件路径的列表,转成字符串后会保留元素的单引号格式(比如["真实路径"]转成字符串后是"'真实路径'"),你仅去掉了括号,却保留了单引号,最终得到的是带无效引号的路径。
修复方案
直接从files列表中提取路径,无需通过字符串转换处理:
修改后的dropEvent方法
def dropEvent(self, event): files = [u.toLocalFile() for u in event.mimeData().urls()] # 拖拽单个文件时取第一个元素,多文件场景可自行遍历处理 if not files: return path = files[0] print(path) # 用with语句自动管理文件句柄,无需手动关闭 with open(path, 'r', encoding='utf-8') as oldcode: b = oldcode.readlines() c = [x.replace('\n','') for x in b] print(c) print(len(c)) for i in range(len(c)): if c[i] == 'xd': c[i] = 'lolz'
额外优化点
- 增加空列表判断:若拖拽空内容,直接返回避免报错
- 使用
with语句操作文件,无需手动调用close()(原代码中oldcode.close还缺少括号,即使执行也无法真正关闭文件)
内容的提问来源于stack exchange,提问作者Ahmet Burhan
相关产品推荐
相关产品推荐

