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

Python unittest报错NameError:变量testdata未定义,原因是什么?

问题原因及解决方法

嘿,这个问题我刚学unittest的时候也踩过一模一样的坑!

报错核心原因

你定义的testdata是MyTestClass这个类的类属性,但在testparse方法里直接写testdata时,Python会默认去全局作用域里找这个变量——可全局作用域根本没定义过它,自然就抛出NameError了。说白了就是你没告诉Python:“我要找的是这个类里的属性!”

两种简单解决方法

方法1:通过self访问类属性

在实例方法里,self代表当前类的实例,通过它可以直接访问类属性(也能访问实例属性),修改后的代码如下:

import unittest
import json

class MyTestClass(unittest.TestCase):
    testdata = "somefile.json"
    def testparse(self):
        # 用self.testdata替代直接写testdata
        data = json.loads(open(self.testdata).read())

方法2:直接通过类名访问类属性

如果确定testdata是固定的类属性,不会被实例修改,也可以直接用类名来访问:

import unittest
import json

class MyTestClass(unittest.TestCase):
    testdata = "somefile.json"
    def testparse(self):
        # 用MyTestClass.testdata替代直接写testdata
        data = json.loads(open(MyTestClass.testdata).read())

小建议

更推荐用self.testdata的写法,因为如果后续你写子类继承MyTestClass,子类可以轻松重写testdata属性,用self的话会自动适配子类的属性,灵活性更高~

内容的提问来源于stack exchange,提问作者BenH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:44:13