[解决方法]PermissionError: [Errno 13] Permission denied:

写Python工程代码,花了我5个小时排错,最后发现是写入文件的时候,权限不够。。

我做个测试:

向C盘根目录写入文件:

a = "C:\\日志_test.txt"
with open(a, 'w', encoding='utf-8') as file_object:
    file_object.write(a)

运行后报错:

D:\Code\check_tool\venv\Scripts\python.exe D:/Code/check_tool/222.py
Traceback (most recent call last):
  File "D:/Code/check_tool/222.py", line 2, in <module>
    with open(a, 'w', encoding='utf-8') as file_object:
PermissionError: [Errno 13] Permission denied: 'C:\\日志_test.txt'

进程已结束,退出代码1

然后我把源代码中的C变成D:

a = "D:\\日志_test.txt"
with open(a, 'w', encoding='utf-8') as file_object:
    file_object.write(a)

运行后不再报错:

D:\Code\check_tool\venv\Scripts\python.exe D:/Code/check_tool/222.py

进程已结束,退出代码0

我也是醉了。。。

所以在Python中写入文件的话,一定得考虑好系统权限这个隐形问题。

### 解决 PythonPermissionError: [Errno 13] Permission denied 错误的方法 #### 一、理解错误原因 `PermissionError: [Errno 13] Permission denied` 是一种常见的运行时异常,当程序尝试访问或修改文件系统中的资源却没有相应的权限时会触发此错误。具体来说,操作系统拒绝了当前用户的操作请求[^1]。 #### 二、解决方案概述 以下是几种常见且有效的解决方法: 1. **验证目标文件的状态** 如果正在尝试打开一个文件进行写入或其他操作,请先确认该文件是否已被其他进程占用。如果文件处于被占用状态,则需要释放其锁后再继续操作[^3]。 2. **检查用户权限** 当前运行脚本的用户可能缺乏对指定路径的操作权限。可以通过更改文件夹或文件的安全属性来赋予必要的权限,或者以具有更高权限的身份重新启动应用程序[^1]。 3. **使用 `try-except` 块捕获并处理异常** 在代码中加入异常处理机制可以有效防止因未预料到的情况而导致整个程序崩溃。例如,在尝试写入文件之前设置保护措施: ```python try: with open('protected_file.txt', 'w') as f: f.write('Hello, World!') except PermissionError: print("没有足够的权限写入文件。") ``` 4. **提供更详细的反馈给最终用户** 对于 GUI 应用程序而言,除了打印日志外还可以通过弹窗等方式向用户提供更加直观的信息提示。下面是一个基于 PyQt 的例子展示如何实现这一点: ```python from PyQt5.QtWidgets import QMessageBox def on_Test(self): try: path = r'D:\Test\output001.xlsx' # 进行 Excel 文件的相关读取/保存逻辑... except PermissionError: print("出现异常") QMessageBox.information( self, '提示', '请确认该文件已关闭!\n文件路径:' + path ) else: print("文件已成功写入") finally: print("do nothing") ``` #### 三、预防性建议 为了减少此类问题的发生频率,开发者可以从以下几个方面入手改进设计思路: - 明确区分不同环境下的配置参数; - 提供清晰的日志记录功能以便快速定位实际发生的状况; - 尽量避免硬编码绝对路径字符串; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值