为什么我不能从 docx.enum.text 导入 WD_ALIGN_PARAGRAPH?

Why can't I import WD_ALIGN_PARAGRAPH from docx.enum.text?

我将一些代码从 IDLE 3.5(64 位)转移到 pycharm(Python 2.7)。大多数代码仍然有效,例如我可以从 docx.enum.text 导入 WD_LINE_SPACING,但由于某些原因我无法导入 WD_ALIGN_PARAGRAPH.

起初,几乎没有导入工作,但在我做了之后
pip 安装 python-docx
而不是
pip 安装 docx
除了 WD_ALIGN_PARAGRAPH.

之外,大多数导入都有效
# works
from __future__ import print_function
import xlrd
import xlwt
import os
import subprocess
from calendar import monthrange
import datetime
from docx import Document
from datetime import datetime
from datetime import date
from docx.enum.text import WD_LINE_SPACING
from docx.shared import Pt

# does not work
from docx.enum.text import WD_ALIGN_PARAGRAPH

我没有收到任何错误消息,但 Pycharm 将该行标记为错误: "Cannot find reference 'WD_ALIGN_PARAGRAPH' in 'text.py'".

您可以改用这个:

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

然后在 WD_ALIGN_PARAGRAPH 之前出现的地方替换 WD_PARAGRAPH_ALIGNMENT

发生这种情况的原因是实际的枚举对象被命名为 WD_PARAGRAPH_ALIGNMENT,并且应用了一个装饰器,它也允许它被引用为 WD_ALIGN_PARAGRAPH(稍微短一点,并且可能更清晰)。我希望 PyCharm 中的语法检查器在直接模块属性上运行并且不会获取别名,该别名由 Python parser/compiler.

解析

有趣的是,我希望您的代码无论哪种方式都能正常工作。但是要摆脱烦人的消息,您可以使用基本名称。

如果有人使用 pylint,可以通过在导入行末尾添加 # pylint: disable=E0611 轻松抑制它。