提交表单时遇Django错误,服务器启动线程出现未处理异常
首先先把你遇到的报错信息贴出来:
执行系统检查...
由<0x75abfcd8处的.wrapper>启动的线程中出现未处理异常:
追溯(最近的调用在前):
文件"/home/pi/.venv/lib/python3.5/site-packages/django/utils/autoreload.py",第225行,在wrapper函数中
fn(*args, **kwargs)
文件"/home/pi/.venv/lib/python3.5/site-packages/django/core/management/commands/runserver.py",第121行,在inner_run函数中
self.check(display_num_errors=True)
文件"/home/pi/.venv/lib/python3.5/site-packages/django/core/management/base.py",第364行,在che...
下面给你一步步排查的思路:
1. 先拿到完整的报错日志
你贴的日志最后截断了,django/core/management/base.py第364行之后的内容才是关键——这部分会明确告诉你系统检查到底发现了什么问题(比如模型字段错误、配置文件语法问题、缺失依赖),一定要把完整的报错栈信息找出来,这是定位问题的第一步。
2. 检查Python和Django的版本兼容性
你用的是Python3.5,这个版本早就停止维护了,而且Django从3.0开始就不再支持Python3.5了。先确认你装的Django版本:
- 跑这个命令看版本:
pip show django - 如果你的Django版本高于2.2,那十有八九是版本不兼容导致的线程异常。解决办法要么把Django降级到2.2.x系列,要么把Python升级到3.6及以上(更推荐后者,毕竟Python3.5太老了,后续坑会更多)
3. 验证虚拟环境是否完好
从路径看你用了虚拟环境/home/pi/.venv,有时候虚拟环境损坏会导致依赖加载异常:
- 先删掉旧环境:
rm -rf /home/pi/.venv - 重新建虚拟环境(如果升级了Python,记得用对应版本的命令,比如
python3.6 -m venv .venv) - 激活环境:
source .venv/bin/activate - 重新装依赖:
pip install django==2.2(或者对应兼容的版本)
4. 关联表单错误和服务器异常
表单提交错误和服务器启动的异常大概率是同一个问题导致的——比如你的表单关联的模型有字段错误(比如字段类型不匹配、漏了必填项),或者表单类本身有语法错误,导致系统检查不通过,进而触发了autoreload线程的异常。可以先:
- 手动跑系统检查命令看完整错误:
python manage.py check - 检查你的表单类代码,比如字段定义、验证逻辑有没有问题,还有模板里渲染表单的语法是否正确
5. 临时关闭自动重载测试
Django的自动重载(autoreload)在旧Python版本上偶尔会有线程bug,如果你暂时没法升级版本,可以试试关闭自动重载启动服务器:
- 执行命令:
python manage.py runserver --noreload - 如果这样服务器能正常启动,那基本可以确定是autoreload和Python3.5的兼容性问题,还是建议尽快升级Python版本
内容的提问来源于stack exchange,提问作者Aditya Bhardwaj

