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
相关产品推荐
相关产品推荐

