【问题标题】:How to fix 'TypeError: __init__() missing 1 required positional argument: 'part'' error in python如何修复'TypeError:__init__()缺少1个必需的位置参数:'part''python中的错误
【发布时间】:2019-09-07 15:03:24
【问题描述】:

控制台一直告诉我这个,说缺少一个参数。

"D:\Program Files (x86)\Python\python.exe" D:/workspace/Glossary_Builder_Python/main.py
Please input the file path
C:\Users\Administrator\Desktop\Allergies.docx
Traceback (most recent call last):
  File "D:/workspace/Glossary_Builder_Python/main.py", line 102, in <module>
    main(sys.argv)
  File "D:/workspace/Glossary_Builder_Python/main.py", line 98, in main
    extractWdFrmDocx(filepath)
  File "D:/workspace/Glossary_Builder_Python/main.py", line 18, in extractWdFrmDocx
    document = Document(file)
TypeError: __init__() missing 1 required positional argument: 'part'

我正在尝试使用 python-docx 和 python 3.7 从 docx 文件中提取一些突出显示的(黄色)文本。 当我进入 Document func 时,__init__ 看起来像这样:

def __init__(self, element, part):
    super(Document, self).__init__(element)
    self._part = part
    self.__body = None

那么这里,'part' 是干什么用的?

下面是提取函数和main函数:

def extractWdFrmDocx(filepath):
    # self.filepath = filepath
    document = Document(filepath)
    for para in document.paragraphs:
        for run in para.runs:
            if run.font.highlight_color == WD_COLOR_INDEX.YELLOW:
                keyText.append(run.text)
    print(keyText)


def main(argv):
    print("Please input the file path")
    filepath = input()
    extractWdFrmDocx(filepath)


if __name__ == "__main__":
    main(sys.argv)

【问题讨论】:

  • 就像错误所说的那样,您的 Document init 需要一个参数 part,您没有提供该参数;您只传递了一个参数,该参数被视为 element 参数。你需要同时通过。
  • so here, what is 'part' for? - 你写了那个类吗?如果不是,它的文档应该描述它 - 如果不是,您将不得不进一步研究该类以弄清楚 它的用途

标签: python python-docx


【解决方案1】:

您可能从docx.document 导入了Document。您不应该直接构造这样的Document 对象。相反,一个用于创建 Document 对象的函数以 docx.Document 的形式提供,它需要一个参数,即您现在使用它的方式。

因此你的代码应该是:

import docx

[...]

document = docx.Document(filepath)

From documentation of python-docx:

文档对象

类 docx.document.Document

[...]

不打算直接构造。使用 docx.Document() 打开或创建文档。

【讨论】:

  • 当您使用from docx.document import Document 而不是from docx import Document 时,可能会发生这种情况。前者是您使用的实际文档对象,后者是“工厂”函数,它通过加载指定文件或加载默认的内置模板文件为您创建它。你肯定想要后者。
猜你喜欢
  • 2021-12-17
  • 2019-06-25
  • 2020-02-25
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
相关资源
最近更新 更多