要在 readthedocs 上编译文档,必须模拟模块 h5py。我得到一个可以用这个简单的代码重现的错误:
from __future__ import print_function
import sys
try:
from unittest.mock import MagicMock
except ImportError:
# Python 2
from mock import Mock as MagicMock
class Mock(MagicMock):
@classmethod
def __getattr__(cls, name):
return Mock()
sys.modules.update({'h5py': Mock()})
import h5py
print(h5py.File, type(h5py.File))
class A(h5py.File):
pass
print(A, type(A))
class B(A):
pass
这个脚本的输出是:
<Mock id='140342061004112'> <class 'mock.mock.Mock'>
<Mock spec='str' id='140342061005584'> <class 'mock.mock.Mock'>
Traceback (most recent call last):
File "problem_mock.py", line 32, in <module>
class B(A):
TypeError: Error when calling the metaclass bases
str() takes at most 1 argument (3 given)
h5py
模拟和的正确方法是什么h5py.File
?
在我看来,这个问题对于带有 readthedocs 的文档来说非常普遍,其中一些模块必须被模拟。社区有一个答案会很有用。