|
本帖最后由 pangforFC 于 2024-11-20 20:45 编辑
更更更新,应该是因为py文件所在的文件夹有问题,文件夹中有一个unittest.py文件,它和 Python 标准库的 unittest 模块同名。当 Python 加载模块时,它首先会在当前路径(sys.path 的首项)中查找模块名,而不是直接使用标准库模块。因此,导入 sklearn 时,间接地导入了这个根目录的 unittest.py 文件,而不是标准库的 unittest。
unittest.py文件内容如下:
import unittest
import json
import sys
try:
filename = sys.argv[1]
with open('tmp/%s' % filename, 'r') as f:
pass
except FileNotFoundError:
print('[X] file not exist. tmp/filename')
sys.exit(0)
except IndexError:
print('[X] please enter filename.')
sys.exit(0)
class ResultTestCase(unittest.TestCase):
def setUp(self):
with open('tmp/%s' % filename, 'r') as f:
self.data = json.loads( f.read() )
def tearDown(self):
pass
# def test_url(self):
e = []
for row in self.data:
if not row['url']:
e.append( (row) )
self.assertEqual(len(e), 0, e)
def test_title(self):
e = []
for row in self.data:
if not row['title']:
e.append( (row['url'], row['title']) )
self.assertEqual(len(e), 0, e)
def test_publish_date(self):
e = []
for row in self.data:
if not row['publish_date']:
e.append( (row['url'], row['publish_date']) )
self.assertEqual(len(e), 0, e)
def test_authors(self):
e = []
for row in self.data:
if not row['authors']:
e.append( (row['url'], row['authors']) )
self.assertEqual(len(e), 0, e)
def test_tags(self):
e = []
for row in self.data:
if not row['tags']:
e.append( (row['url'], row['tags']) )
self.assertEqual(len(e), 0, e)
def test_text(self):
e = []
for row in self.data:
if not row['text']:
e.append( (row['url'], row['text']) )
self.assertEqual(len(e), 0, e)
def test_text_html(self):
e = []
for row in self.data:
if not row['text_html']:
e.append( (row['url'], row['text_html']) )
self.assertEqual(len(e), 0, e)
def test_images(self):
e = []
for row in self.data:
if not row['images']:
e.append( (row['url'], row['images']) )
self.assertEqual(len(e), 0, e)
def test_video(self):
e = []
for row in self.data:
if not row['video']:
e.append( (row['url'], row['video']) )
self.assertEqual(len(e), 0, e)
def test_links(self):
e = []
for row in self.data:
if len(row['links']) == 0:
e.append( (row['url'], row['links']) )
self.assertEqual(len(e), 0, e)
if __name__ == '__main__':
unittest.main(argv = [sys.argv[0]])
sklearn 间接依赖 unittest
在加载过程中,sklearn 可能导入了标准库的 unittest 模块(这是很常见的,因为很多包在内部使用 unittest 进行单元测试)。
由于你的 unittest.py 文件和标准库的 unittest 模块重名,Python 优先加载当前目录的 unittest.py 文件。
你的 unittest.py 文件中的代码被执行
当 unittest.py 被加载时,try 块中的代码会在模块导入时立即运行(因为它在全局作用域)。
如果没有提供命令行参数(即没有 sys.argv[1]),会触发 IndexError,导致 [X] please enter filename. 被打印。 |
|