{"record":{"id":"9186fb0bf24b59c8","repo":"opendatalab/MinerU","slug":"module-name-r-has-no-attribute-name-r","errorCode":null,"errorMessage":"module {__name__!r} has no attribute {name!r}","messagePattern":"module (.+?) has no attribute (.+?)","errorType":"exception","errorClass":"AttributeError","httpStatus":null,"severity":"error","filePath":"mineru/data/data_reader_writer/__init__.py","lineNumber":38,"sourceCode":"    \"\"\"按需加载 S3 DataReader/DataWriter，避免默认安装场景强制依赖 boto3。\"\"\"\n    if name in {\"MultiBucketS3DataReader\", \"MultiBucketS3DataWriter\"}:\n        from .multi_bucket_s3 import MultiBucketS3DataReader, MultiBucketS3DataWriter\n\n        s3_exports = {\n            \"MultiBucketS3DataReader\": MultiBucketS3DataReader,\n            \"MultiBucketS3DataWriter\": MultiBucketS3DataWriter,\n        }\n        globals().update(s3_exports)\n        return s3_exports[name]\n\n    if name in {\"S3DataReader\", \"S3DataWriter\"}:\n        from .s3 import S3DataReader, S3DataWriter\n\n        s3_exports = {\"S3DataReader\": S3DataReader, \"S3DataWriter\": S3DataWriter}\n        globals().update(s3_exports)\n        return s3_exports[name]\n\n    raise AttributeError(f\"module {__name__!r} has no attribute {name!r}\")\n","sourceCodeStart":20,"sourceCodeEnd":39,"githubUrl":"https://github.com/opendatalab/MinerU/blob/4fe4bde114a23ee5dd637eae99b767f4669bf58c/mineru/data/data_reader_writer/__init__.py#L20-L39","documentation":"AttributeError raised by the lazy-import __getattr__ in mineru.data.data_reader_writer: the requested attribute is not one of the lazily exported names (e.g. MultiBucketS3DataWriter, S3DataReader, S3DataWriter). The module defers heavy imports; anything outside the known lazy export set falls through to this error.","triggerScenarios":"from mineru.data.data_reader_writer import SomeName where SomeName is not defined in the package's __init__ lazy export table; also getattr(mineru.data.data_reader_writer, 'typo') style access; common with renamed or removed reader/writer classes across MinerU versions.","commonSituations":"Upgrading MinerU and using a class name that moved or was removed (e.g. old reader/writer names); IDE autocompleting a stale name; copy-pasted code from older docs.","solutions":["Check the package __init__ / dir(mineru.data.data_reader_writer) for the actual exported names","Use the correct current class name (e.g. S3DataReader/S3DataWriter for S3, or import the defining submodule directly)","Pin or upgrade to the MinerU version whose API your code targets","For S3 classes, ensure optional S3 dependencies are installed so their imports succeed"],"exampleFix":"# before\nfrom mineru.data.data_reader_writer import S3Reader  # AttributeError\n\n# after\nfrom mineru.data.data_reader_writer import S3DataReader","handlingStrategy":"type-guard","validationCode":"import mineru.data.data_reader_writer as drw\n\nname = 'S3DataReader'\nif not hasattr(drw, name):\n    raise ImportError(f'{name} not available in this MinerU version')\nKlass = getattr(drw, name)","typeGuard":"from mineru.data.data_reader_writer import S3DataReader, S3DataWriter\n\nKNOWN = {'S3DataReader', 'S3DataWriter', 'MultiBucketS3DataWriter'}\n\ndef reader_class_exists(name: str) -> bool:\n    import mineru.data.data_reader_writer as drw\n    return name in KNOWN and hasattr(drw, name)","tryCatchPattern":"try:\n    from mineru.data.data_reader_writer import S3DataReader\nexcept ImportError as exc:\n    raise ImportError('Install MinerU S3 extras (boto3) or fix the class name') from exc","preventionTips":["Check dir(mineru.data.data_reader_writer) for available classes after upgrading MinerU","Import from the defining submodule when unsure of the lazy export list","Pin the MinerU version in requirements to prevent silent API changes","Run a smoke import of every symbol you use in CI"],"tags":["mineru","python","import","attributeerror","api-mismatch"],"backgroundTag":null,"analyzedSha":"4fe4bde114a23ee5dd637eae99b767f4669bf58c","analyzedAt":"2026-08-14T21:29:18.456Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}