Rumah > pembangunan bahagian belakang > Tutorial Python > Ralat mengemas kini senarai semasa menggelung dalam Python

Ralat mengemas kini senarai semasa menggelung dalam Python

WBOY
Lepaskan: 2024-02-22 13:07:03
ke hadapan
862 orang telah melayarinya

在 Python 中循环时更新列表时出错

Kandungan soalan

Mengapa senarai "span" tidak pernah dikemas kini? Saya tidak faham mengapa kod itu tersekat dalam gelung tak terhingga.

pdf: https://www.sil.org/system/files/reapdata/62/99/18/62991811720566250411942290005522370655/40337_02.pdf

Contoh "Sekat": https://jumpshare.com/s/y393jobqjfiye51gkexn

import fitz

doc = fitz.open("cubeo/40337_02.pdf")
page = doc[3]

blocks = page.get_text("dict", flags = fitz.TEXTFLAGS_TEXT)["blocks"]
for block in blocks: 
    entries = []
    if len(block["lines"]) > 3: # ignora legendas e número de página
        for line in block["lines"]: 
            spans = []
            for span in line["spans"]:
                spans.append({"text": span["text"].replace("�", " "), "size": int(span["size"]), "font": span["font"]})

            # While there are spans left
            while True:
                # Delimits where an entry starts
                entry_first_position = None
                for i, span in enumerate(spans):
                    if span["font"] == "Sb&cuSILCharis-Bold":
                        entry_first_position = i
                        break
                if entry_first_position is not None:
                    # Delimits where an entry ends
                    entry_last_position = None
                    for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
                        if span["font"] == "Sb&cuSILCharis-Bold":
                            entry_last_position = i
                            break
                    if entry_last_position is not None:
                        # Whole entry is added as a list
                        append_list = spans[entry_first_position:entry_last_position]
                        entries.append(append_list)
                        spans = spans[:entry_first_position] + spans[entry_last_position:]
                    else:
                        break
                else:
                    break
             print(spans)
Salin selepas log masuk

Apa yang saya jangkakan ialah cetakan(span) mengeluarkan "[]". Walau bagaimanapun, kod itu tidak pernah sampai ke tahap ini.


Jawapan betul


for i, span in enumerate(spans[entry_first_position:], start=entry_first_position):
Salin selepas log masuk

tidak dilangkau span["font"] == "sb&cusilcharis-bold" 的第一个匹配项。所以 entry_last_position == entry_first_position , tiada apa yang dipadamkan dan anda terperangkap dalam gelung yang tidak terhingga. Tukar kepada

for i, span in enumerate(spans[entry_first_position+1:], start=entry_first_position+1):
Salin selepas log masuk

Jadi ia mula melihat kedudukan seterusnya dalam senarai

Atas ialah kandungan terperinci Ralat mengemas kini senarai semasa menggelung dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan