Я получаю синтаксическую ошибку в своем операторе IF, не знаете почему? - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь запустить следующий код в Python 3.7.Я продолжаю получать неверную синтаксическую ошибку и не уверен, почему, кто-то может определить, что я делаю неправильно?Отступ, кажется, в порядке, мои «Отпечатки» заключены в правильные скобки, я верю, но я полностью потерян в выражениях «if» и «else».

class pdfPositionHandling:

    def parse_obj(self, lt_objs):

        # loop over the object list
        for obj in lt_objs:

            if isinstance(obj, pdfminer.layout.LTTextLine):
                print ("%6d, %6d, %s" % (obj.bbox[0], obj.bbox[1], obj.get_text().replace('\n', '_'))

            # if it's a textbox, also recurse
            if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal):
                self.parse_obj(obj._objs)

            # if it's a container, recurse
            elif isinstance(obj, pdfminer.layout.LTFigure):
                self.parse_obj(obj._objs)

    def parsepdf(self, filename, startpage, endpage):

        # Open a PDF file.
        fp = open(filename, 'rb')

        # Create a PDF parser object associated with the file object.
        parser = PDFParser(fp)

        # Create a PDF document object that stores the document structure.
        # Password for initialization as 2nd parameter
        document = PDFDocument(parser)

        # Check if the document allows text extraction. If not, abort.
        if not document.is_extractable:
            raise PDFTextExtractionNotAllowed

        # Create a PDF resource manager object that stores shared resources.
        rsrcmgr = PDFResourceManager()

        # Create a PDF device object.
        device = PDFDevice(rsrcmgr)

        # BEGIN LAYOUT ANALYSIS
        # Set parameters for analysis.
        laparams = LAParams()

        # Create a PDF page aggregator object.
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)

            # Create a PDF interpreter object.
        interpreter = PDFPageInterpreter(rsrcmgr, device)


        i = 0
        # loop over all pages in the document
        for page in PDFPage.create_pages(document):
            if i >= startpage and i <= endpage:
                # read the page into a layout object
                interpreter.process_page(page)
                layout = device.get_result()

                # extract text from this object
                self.parse_obj(layout._objs)
            i += 1

Я получаю следующую ошибку:

File "C:/Users/951298/Documents/Python Scripts/PDF Scraping/untitled1.py", line 12
    if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal):
                                                           ^
SyntaxError: invalid syntax

Не знаете, почему его точка в конце двоеточия?

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Вы забыли поставить конечную скобку в своем заявлении на печать.Это приводит к ошибке в следующей строке, потому что интерпретатор игнорирует символы новой строки при чтении кода в скобках.Фактически, единственная причина, по которой он выдал ошибку в строке 12, заключается в том, что if isinstance(obj, pdfminer.layout.LTTextBoxHorizontal): is не является допустимым аргументом для передачи на печать.

Следовательно, следующий код выдаст ошибку в строке 11.

bar = "a"
baz = "a"

def foo(msg, bar="\n"):
    print(msg, end=bar)

if bar == baz:
    foo("bar is equal to baz",
    bar = baz

else: #Throws error here
    foo("bar is not equal to baz")

#Not the best example, I know, sorry.

Странно, не правда ли?Обязательно взгляните на строку (и) над строкой, которая выдает ошибку.Это дает вам и контекст, и потенциальный ошибочный код.Вам особенно нужно следить за такого рода ошибками в языках программирования, которые требуют терминаторов новой строки.

0 голосов
/ 14 февраля 2019

В строке 9 у вас должно быть 3 завершающих скобки, но я также случайно заметил, что у вас есть два оператора if и один оператор elif, но не более того, все они должны быть операторами if.Надеюсь, я помог!

0 голосов
/ 28 декабря 2018

В строке 9 вы должны были ввести 3 скобки в конце, но у вас было только 2 из них. Добавьте еще одну скобку, и она будет работать нормально.

...