You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm中运行带Coverage的Django测试报TypeError问题求助

PyCharm中Django项目带Coverage测试报错的解决方案

报错信息

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2023.1.2\plugins\python\helpers\pycharm\django_test_manage.py", line 6, in <module>
    from django.core.management import ManagementUtility
  File "C:\Users\User\Project\Code\venv39-master\lib\site-packages\django\core\management\__init__.py", line 13, in <module>
    from django.apps import apps
  File "C:\Users\User\Project\Code\venv39-master\lib\site-packages\django\apps\__init__.py", line 1, in <module>
    from .config import AppConfig
  File "C:\Users\User\Project\Code\venv39-master\lib\site-packages\django\apps\config.py", line 7, in <module>
    from django.utils.deprecation import RemovedInDjango41Warning
  File "C:\Users\User\Project\Code\venv39-master\lib\site-packages\django\utils\deprecation.py", line 5, in <module>
    from asgiref.sync import sync_to_async
  File "C:\Users\User\Project\Code\venv39-master\lib\site-packages\asgiref\sync.py", line 130, in <module>
    class AsyncToSync(Generic[_P, _R]):
  File "C:\Program Files\Python39\lib\typing.py", line 277, in inner
    return func(*args, **kwds)
  File "C:\Program Files\Python39\lib\typing.py", line 997, in __class_getitem__
    raise TypeError(
TypeError: Parameters to Generic[...] must all be type variables

测试代码

class SimpleTest(TestCase):
    def test_basic_addition(self):
        self.assertEqual(1 + 1, 2)

当前环境版本

  • Python 3.9.13
  • Django 3.2.20
  • asgiref 3.7.2
  • typing_extensions 4.8.0

异常现象

在终端使用以下命令运行测试完全正常:

coverage run ./manage.py test -v 3  

但在PyCharm IDE中运行带Coverage的测试时触发上述报错,且JetBrains说明PyCharm使用的是相同的Coverage库。

Coverage系统信息

% coverage debug sys                                                      
-- sys -------------------------------------------------------
coverage_version: 7.3.2
coverage_module: C:\Users\User\Project\Code\venv39-master\lib\site-packages\coverage\__init__.py
python: 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)]
platform: Windows-10-10.0.22621-SP0
implementation: CPython
executable: C:\Users\User\Project\Code\venv39-master\Scripts\python.exe
path: C:\Users\User\Project\Code\venv39-master\Scripts\coverage.exe
       C:\Program Files\Python39\python39.zip
       C:\Program Files\Python39\DLLs
       C:\Program Files\Python39\lib
       C:\Program Files\Python39
       C:\Users\User\Project\Code\venv39-master
       C:\Users\User\Project\Code\venv39-master\lib\site-packages

解决方案

1. 降级asgiref到兼容Python3.9的版本

asgiref 3.7.x版本引入的泛型类型写法在Python3.9的原生typing模块中不兼容,需要降级到3.6.x版本:

pip install asgiref==3.6.0

该版本可与Python3.9、Django3.2.x完美适配,不会触发类型错误。

2. 检查PyCharm测试配置

  • 打开PyCharm的Run/Debug Configurations,找到对应的测试配置
  • 确认Python interpreter选择的是项目对应的虚拟环境(venv39-master)
  • 勾选Emulate terminal in output console,让测试运行环境与终端保持一致

3. 禁用PyCharm的Django测试助手脚本

若降级asgiref无效,可尝试绕过PyCharm自带的测试助手:

  • 在测试配置中,将Target改为直接运行manage.py test,而非通过PyCharm的django_test_manage.py
  • 手动添加Coverage参数:在Script parameters中填入test -v 3,然后在Before launch中添加Run External tool,选择Coverage并配置参数指向项目的manage.py

内容的提问来源于stack exchange,提问作者Jorge Miguel Soares Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:53:15