IDLE中open打开文件报PermissionError[Errno 1]终端运行正常
问题成因
该问题几乎都出现在macOS环境下,核心触发原因有两类:
- GUI程序与终端程序的权限隔离:macOS对图形界面应用和命令行终端的权限管控机制独立。通过安装包部署的IDLE属于GUI应用,默认未被授予用户目录的读写权限,访问用户路径下的文件时会直接被系统拦截抛出
PermissionError;而终端程序默认继承当前登录用户的目录操作权限,在对应目录下执行代码时可以正常访问文件。 - 相对路径匹配错误:IDLE启动时的默认工作目录通常是Python自身的安装路径(属于系统受保护路径),如果直接用相对路径
"abc.txt"打开文件,实际访问的是受保护路径下的目标文件,自然会触发权限报错;而在终端运行代码时,你本身就处于abc.txt所在的工作目录,相对路径可以正确命中目标文件,不会触发权限拦截。 - 小概率触发场景:IDLE被macOS标记为互联网下载的隔离应用,系统默认限制其所有本地文件读写行为。
解决方法
按优先级依次尝试即可:
- 先校验工作目录匹配性
在IDLE中先执行以下代码,确认当前工作目录:
如果输出路径不是import os print(os.getcwd())abc.txt的存放目录,两种修复方式:- 打开文件时传入文件的完整绝对路径,示例:
f = open("/Users/你的用户名/项目目录/abc.txt") - 执行
os.chdir("/Users/你的用户名/项目目录")切换到正确工作目录后,再用相对路径打开文件
- 打开文件时传入文件的完整绝对路径,示例:
- 为IDLE开放磁盘访问权限
打开「系统设置→隐私与安全性→完全磁盘访问权限」,在应用列表中找到对应版本的IDLE,勾选权限开关;如果列表中找不到IDLE,直接把应用程序文件夹里的IDLE.app拖入权限列表即可。操作完成后完全退出IDLE重启,再执行代码即可正常读写文件。 - 清除应用隔离标记(前两种方法无效时使用)
在终端执行以下命令,清除IDLE的互联网下载隔离属性,注意把路径中的3.x替换为你本地安装的实际Python版本号:
执行完成后重启IDLE即可。xattr -d com.apple.quarantine /Applications/Python\ 3.x/IDLE.app
不要通过sudo启动IDLE的方式提权解决问题,该操作会破坏Python环境的文件权限归属,后续安装第三方库时会频繁出现权限报错。
内容的提问来源于stack exchange,提问作者x10
相关产品推荐
相关产品推荐

