根本原因是无法调用非Unipre路径中
PyMem_Free的
path变量:
if (!PyArg_ParseTuple(args, "et:_isdir", Py_FileSystemDefaultEncoding, &path)) return NULL; attributes = GetFileAttributesA(path); if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE;check: if (attributes & FILE_ATTRIBUTE_DIRECTORY) Py_RETURN_TRUE; else Py_RETURN_FALSE;
根据有关文档
PyArg_ParseTuple:
et:与es…相同 es:PyArg_ParseTuple()将分配所需大小的缓冲区,将编码后的数据复制到该缓冲区中,并调整*
buffer以引用新分配的存储。 调用方负责PyMem_Free()在使用后进行调用以释放分配的缓冲区。
这是Python标准库中的一个错误(在Python
3中直接使用bytes对象修复了该错误);在http://bugs.python.org上提交错误报告。



