Python3.9导入cryptography.fernet模块报ValueError问题排查
问题根因
这个报错和cryptography库没有任何关系,重装依赖属于无效操作。
报错触发点在Python加载、编译你编写的测试脚本的阶段,此时代码还没执行到导入模块的逻辑,解释器读到了源码里的\0空字节,就会直接抛出ValueError: source code string cannot contain null bytes。
排查与解决方案
按优先级从高到低依次排查即可:
- 优先校验你的测试脚本文件本身
绝大多数这类问题都是源码文件被插入了不可见空字节导致的,常见诱因包括从网页/聊天窗口复制代码带了隐藏字符、文件保存时编码异常、文件被损坏。直接新建一个空白.py文件,手动逐字符敲入测试代码,全程不要复制粘贴,保存后重新运行,绝大多数场景下可以直接解决问题。
如果要定位原文件的空字节位置,可以运行以下检测代码:# 把文件名替换成你自己的测试脚本路径 with open("test.py", "rb") as f: data = f.read() if b"\x00" in data: print(f"检测到空字节,偏移位置:{data.find(b'\x00')}") - 修复VS Code侧的配置与缓存问题
- 关闭VS Code,删除项目目录下的
.vscode文件夹、以及所有__pycache__缓存目录,重新打开VS Code加载项目后重试 - 查看VS Code右下角的文件编码标识,确认当前脚本保存为
UTF-8编码,不要使用UTF-16、带BOM的异常编码,若编码错误点击右下角编码选项,选择「以UTF-8编码重新保存」即可 - 确认VS Code选中的Python解释器为你正常安装的Python3.9路径,不要选到损坏的虚拟环境、被篡改的运行时。如果命令行下直接运行脚本正常,仅VS Code调试时报错,直接卸载重装VS Code的Python扩展即可——你贴的报错栈里涉及的
debugpy是该扩展自带的调试组件,扩展文件损坏也会触发同类报错
- 关闭VS Code,删除项目目录下的
- 排查系统层异常
如果以上操作都无效,检查存放代码的磁盘是否存在坏道、是否有安全软件篡改了本地文件,可以把测试脚本移动到其他磁盘分区的空目录下重新运行测试。
内容的提问来源于stack exchange,提问作者Ryder R
相关产品推荐
相关产品推荐

