Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Bug: blank lines in wav.scp / jsonl file lists crash prepare_data_iterator (IndexError / JSONDecodeError)

オープン 初心者向け
#3,757 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@Lesereingrape がすでに取り組んでいます。

2026年10月3日 から。

  • #3758 @Lesereingrape による — オープン

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
85/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
python
領域
backend

調査の方向性

funasr/auto/auto_model.py の prepare_data_iterator() から始め、特に issue で説明されている .jsonl と id/data の解析分岐を確認します。wav.scp と data.jsonl の両方について、空行および空白だけの行を含む、提供された再現手順を実行します。空行が無視され、両方の呼び出しが、どちらの例外も発生させずに、期待される 2 つの ID とデータパスを返せば完了です。

索引モデルが issue の本文から書いたものです。

説明

🐛 Bug

AutoModel.generate() with a file list (wav.scp, text.txt, file.jsonl, ...) crashes if the list contains a blank or whitespace-only line. prepare_data_iterator() in funasr/auto/auto_model.py iterates over every line without skipping empty ones:

  • the id \t data branch does lines = line.strip().split(maxsplit=1) and then indexes lines[0], so an empty line raises IndexError: list index out of range;
  • the .jsonl branch calls json.loads(line.strip()) on the empty line and raises json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0).

Blank lines are easy to produce in practice — lists concatenated from several sources, lists edited by hand, or files written with an extra separator line — and one of them aborts the whole batch instead of being ignored.

To Reproduce

  1. Install from source: pip install -e .
  2. Run the snippet below (it calls prepare_data_iterator directly, so no model weights or download are needed).
  3. See IndexError for the .scp list and JSONDecodeError for the .jsonl list.

Code sample

from funasr.auto.auto_model import prepare_data_iterator

open("wav.scp", "w", encoding="utf-8").write("utt1 /a.wav\n\nutt2 /b.wav\n")
open("data.jsonl", "w", encoding="utf-8").write(
    '{"key": "k1", "source": "/a.wav"}\n\n{"key": "k2", "source": "/b.wav"}\n'
)

prepare_data_iterator("wav.scp")     # IndexError: list index out of range
prepare_data_iterator("data.jsonl")  # json.decoder.JSONDecodeError

The same crash reaches users through model.generate(input="wav.scp").

Expected behavior

Blank lines carry no utterance, so they should be skipped; the two real entries should come back as (['utt1', 'utt2'], ['/a.wav', '/b.wav']) and (['k1', 'k2'], ['/a.wav', '/b.wav']), exactly as they do when the blank line is deleted manually.

Error logs

Traceback (most recent call last):
  File "repro.py", line 8, in <module>
    prepare_data_iterator("wav.scp")
  File ".../funasr/auto/auto_model.py", line 479, in prepare_data_iterator
    data = lines[1] if len(lines) > 1 else lines[0]
IndexError: list index out of range

Traceback (most recent call last):
  File "repro.py", line 9, in <module>
    prepare_data_iterator("data.jsonl")
  File ".../funasr/auto/auto_model.py", line 474, in prepare_data_iterator
    lines = json.loads(line.strip())
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Environment

  • OS: Windows 11 26200 (the file-list reader is pure Python, so this reproduces on Linux too)
  • Python version: 3.11.14
  • FunASR version: source main at 66d7a4c264a5993a2a63ed00c1f402c296ee521a
  • ModelScope version: not used by this code path
  • PyTorch / torchaudio version: 2.14.1+cpu
  • Install method (pip, source, Docker): source, pip install -e . equivalent
  • Device (cuda, cpu, mps): cpu
  • GPU model: n/a
  • CUDA/cuDNN version: n/a
  • Docker image tag, if used: n/a

Audio details

No audio is needed — the crash happens while parsing the list file itself.

主要言語
Python
スター
20.5k
フォーク
2.1k
平均マージ
17時間 27分
マージ済み PR(30日)
91

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

modelscope/FunASR のほかの issue

modelscope/FunASR の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。