Python调用os.startfile打开含重音路径MKV文件遇WinError2错误
问题解决:Python3电影数据库打开含法语重音的.mkv文件报FileNotFoundError(WinError 2)
问题背景
我开发了一个Python3电影数据库项目,包含影片标题、剧情、评分、类型等信息,点击界面内的影片条目会触发打开对应本地视频文件的操作。但在打开.mkv格式文件时,始终抛出FileNotFoundError: [WinError 2]错误,且目标文件路径包含法语重音字符。
相关代码
错误版本(遗漏子文件夹)
import subprocess import os def launch_video(file_name): # 错误点:仅拼接根目录与文件名,缺失中间子文件夹层级 wrong_path = os.path.join("D:/Films", file_name) subprocess.run(["start", "", wrong_path], shell=True)
修正后版本
import subprocess def launch_video(full_file_path): # 直接使用数据库存储的完整路径 subprocess.run(["start", "", full_file_path], shell=True)
完整报错信息
Traceback (most recent call last): File "movie_db.py", line 45, in launch_video subprocess.run(["start", "", wrong_path], shell=True) File "C:\Python39\lib\subprocess.py", line 505, in run with Popen(*popenargs, **kwargs) as process: File "C:\Python39\lib\subprocess.py", line 951, in __init__ self._execute_child(args, executable, preexec_fn, close_fds, File "C:\Python39\lib\subprocess.py", line 1420, in _execute_child hp, ht, pid, tid = _winapi.CreateProcess(executable, args, FileNotFoundError: [WinError 2] 系统找不到指定的文件。
数据库中存储的文件路径示例
D:/Films Français/La Haine.mkv
排查与解决过程
- 最初怀疑是法语重音字符的编码问题,但打印修正后的路径时,字符显示完全正常,排除编码因素
- 对比数据库存储路径与代码生成路径,发现代码手动拼接路径时遗漏了子文件夹
Français,导致路径不完整,系统无法定位文件 - 解决方式:直接调用数据库中存储的完整文件路径,不再手动拆分拼接路径片段
内容的提问来源于stack exchange,提问作者Nathan Sauret
相关产品推荐
相关产品推荐

