C:\Users\FMR\AppData\Local\Programs\Python\Python39\python.exe D:\中医智能诊疗系统\智能中医系统\康熙字典\提取目录存书.py 文件路径: C:/Users/FMR/Downloads/伤寒论原文打印版.doc 进程已结束,退出代码为 -1073740791 (0xC0000409)
时间: 2025-09-13 19:56:43 AIGC 浏览: 2
你遇到的错误:
```
退出代码为 -1073740791 (0xC0000409)
```
是 Windows 系统下常见的 **“未处理的异常”** 错误,通常意味着程序在运行时发生了 **内存访问冲突** 或 **堆栈溢出**,尤其常见于 **C/C++ 扩展模块(如 PyQt、docx、pymysql 等)** 中。
---
## 🧨 错误分析:`-1073740791 (0xC0000409)` 是什么?
这个错误码在 Windows 中表示:
> `STATUS_STACK_OVERFLOW`(堆栈溢出)或 **缓冲区溢出、非法内存访问**
常见于:
- PyQt5 与某些 Windows 版本或显卡驱动不兼容;
- 使用了损坏的 `.doc` 文件;
- 使用了不兼容的 Python 扩展模块;
- 多线程或递归调用导致堆栈溢出;
- 第三方库版本冲突(如 `python-docx`、`pymysql`、`PyQt5` 等);
---
## 📋 你提供的日志分析:
```
文件路径: C:/Users/FMR/Downloads/伤寒论原文打印版.doc
```
说明:
- 文件路径已正确读取;
- 可能问题出在 `.doc` 文件读取或后续处理过程中;
- 如果是 `.doc`(不是 `.docx`),`python-docx` 无法处理,会报错或崩溃;
- 如果是 `.docx`,可能内容格式复杂,导致解析异常。
---
## ✅ 解决方案与优化建议
### ✅ 1. 确认文件格式是否为 `.docx`
你当前代码中使用的是 `python-docx` 模块:
```python
from docx import Document
```
**只能处理 `.docx` 格式**,不能处理 `.doc` 格式。
#### ✅ 解决方法:
- 将 `.doc` 文件转换为 `.docx`(可用 Word 打开后另存为 `.docx`);
- 或者使用 `pywin32`(仅限 Windows)读取 `.doc` 文件:
```python
import win32com.client
def read_doc_file(file_path):
word = win32com.client.Dispatch("Word.Application")
word.Visible = False
doc = word.Documents.Open(file_path)
text = doc.Content.Text
doc.Close()
word.Quit()
return text
```
---
### ✅ 2. 更新或重装 PyQt5 和 python-docx
有时 PyQt5 的某些版本在 Windows 上会崩溃,建议升级:
```bash
pip install --upgrade PyQt5 python-docx pymysql
```
或使用虚拟环境:
```bash
python -m venv venv
venv\Scripts\pip install PyQt5 python-docx pymysql
```
---
### ✅ 3. 添加异常捕获防止崩溃
在 `extract_chapters` 方法中添加更全面的异常捕获:
```python
def extract_chapters(self):
try:
doc = Document(self.file_path)
full_text = "\n".join([para.text for para in doc.paragraphs])
...
except Exception as e:
print("提取章节失败:", e)
return []
```
---
### ✅ 4. 检查是否是 PyQt5 的 bug(常见于 Windows)
- 如果你使用的是 PyQt5.15.x,可能会遇到这个崩溃;
- **建议**:升级到 **PySide6** 或 **PyQt6**,它们更稳定,兼容性更好。
---
## ✅ 优化后的 `extract_chapters` 方法(增强健壮性)
```python
def extract_chapters(self):
try:
doc = Document(self.file_path)
full_text = "\n".join([para.text for para in doc.paragraphs])
parts = CHAPTER_PATTERN.split(full_text)
if parts and parts[0] == '':
parts = parts[1:]
chapters = []
for i in range(0, len(parts), 2):
if i + 1 >= len(parts):
break
chapter_title = parts[i].strip()
content = parts[i + 1].strip()
if chapter_title and content:
chapters.append((chapter_title, content))
return chapters
except Exception as e:
print("提取章节失败:", e)
return []
```
---
## ✅ 附加建议:使用日志记录代替 print()
使用 `logging` 模块代替 `print()`,方便排查问题:
```python
import logging
logging.basicConfig(level=logging.DEBUG, filename='app.log', filemode='w',
format='%(asctime)s - %(levelname)s - %(message)s')
# 示例:
logging.debug("文件路径: %s", self.file_path)
```
---
## ✅ 总结排查流程
| 步骤 | 检查内容 |
|------|----------|
| 1 | 文件是否为 `.docx` 格式? |
| 2 | 是否使用了 `win32com` 来读取 `.doc`? |
| 3 | PyQt5 是否是最新版?是否考虑切换到 PySide6? |
| 4 | 是否在关键函数中添加了异常捕获? |
| 5 | 是否使用了虚拟环境?依赖是否干净? |
| 6 | 是否使用日志记录代替 print()? |
---
##
阅读全文
相关推荐

















