whipper icon indicating copy to clipboard operation
whipper copied to clipboard

Handle "float division by zero" more gracefully

Open hadess opened this issue 1 year ago • 3 comments

Trying to rip https://musicbrainz.org/release/9b7c8b00-0e37-4a0d-8fc1-3d0caa2c00c8 using one of my more reliable CD drives (a Samsung-branded USB DVD drive, TSSTcorp CDDVDW SE-208DB (MF00)), I got:

INFO:whipper.command.cd:using configured read offset 6
INFO:whipper.command.cd:checking device /dev/sr1
CDDB disc id: 02119e11
MusicBrainz disc id LGQXTzPqQ0PM04GzpYK553mQcP8-
MusicBrainz lookup URL https://musicbrainz.org/cdtoc/attach?toc=1+17+338429+150+19127+32902+43905+65508+81139+83375+109349+130786+147105+167660+198364+220295+248945+269620+296580+314878&tracks=17&id=LGQXTzPqQ0PM04GzpYK553mQcP8-
Disc duration: 01:15:10.386, 17 audio tracks

Matching releases:

Artist  : Bob Sinclar
Title   : Enjoy: The Movie & The Mix (Disc 1 of 2)
Duration: 01:15:10.379
URL     : https://musicbrainz.org/release/9b7c8b00-0e37-4a0d-8fc1-3d0caa2c00c8
Release : 9b7c8b00-0e37-4a0d-8fc1-3d0caa2c00c8
Type    : Compilation
Barcode : 826194003326
Country : United Kingdom
Cat no  : ENJOY01CD

INFO:whipper.command.cd:ripping track 1 of 17: 01. Bob Sinclar - Save our Soul.flac
WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 44633948
WARNING:whipper.program.cdparanoia:non-integral amount of frames difference
Traceback (most recent call last): 100 %
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 193, in getTrackQuality
    return min(frames * 2.0 / reads, 1.0)
               ~~~~~~~~~~~~~^~~~~~~
ZeroDivisionError: float division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.12/site-packages/whipper/extern/task/task.py", line 523, in c
    callable_task(*args, **kwargs)
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 324, in _read
    self._done()
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 400, in _done
    self.quality = self._parser.getTrackQuality()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 195, in getTrackQuality
    raise RuntimeError("cdparanoia couldn't read any frames "
RuntimeError: cdparanoia couldn't read any frames for the current track
INFO:whipper.command.cd:ripping track 1 of 17 (try 2): 01. Bob Sinclar - Save our Soul.flac
WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 44633948
WARNING:whipper.program.cdparanoia:non-integral amount of frames difference
Traceback (most recent call last):f 9) ... 100 %
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 193, in getTrackQuality
    return min(frames * 2.0 / reads, 1.0)
               ~~~~~~~~~~~~~^~~~~~~
ZeroDivisionError: float division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.12/site-packages/whipper/extern/task/task.py", line 523, in c
    callable_task(*args, **kwargs)
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 324, in _read
    self._done()
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 400, in _done
    self.quality = self._parser.getTrackQuality()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 195, in getTrackQuality
    raise RuntimeError("cdparanoia couldn't read any frames "
RuntimeError: cdparanoia couldn't read any frames for the current track
INFO:whipper.command.cd:ripping track 1 of 17 (try 3): 01. Bob Sinclar - Save our Soul.flac
WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 44633948
WARNING:whipper.program.cdparanoia:non-integral amount of frames difference
Traceback (most recent call last):f 9) ... 100 %
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 193, in getTrackQuality
    return min(frames * 2.0 / reads, 1.0)
               ~~~~~~~~~~~~~^~~~~~~
ZeroDivisionError: float division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.12/site-packages/whipper/extern/task/task.py", line 523, in c
    callable_task(*args, **kwargs)
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 324, in _read
    self._done()
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 400, in _done
    self.quality = self._parser.getTrackQuality()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 195, in getTrackQuality
    raise RuntimeError("cdparanoia couldn't read any frames "
RuntimeError: cdparanoia couldn't read any frames for the current track
INFO:whipper.command.cd:ripping track 1 of 17 (try 4): 01. Bob Sinclar - Save our Soul.flac
WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 44633948
WARNING:whipper.program.cdparanoia:non-integral amount of frames difference
Traceback (most recent call last):f 9) ... 100 %
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 193, in getTrackQuality
    return min(frames * 2.0 / reads, 1.0)
               ~~~~~~~~~~~~~^~~~~~~
ZeroDivisionError: float division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.12/site-packages/whipper/extern/task/task.py", line 523, in c
    callable_task(*args, **kwargs)
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 324, in _read
    self._done()
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 400, in _done
    self.quality = self._parser.getTrackQuality()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 195, in getTrackQuality
    raise RuntimeError("cdparanoia couldn't read any frames "
RuntimeError: cdparanoia couldn't read any frames for the current track
INFO:whipper.command.cd:ripping track 1 of 17 (try 5): 01. Bob Sinclar - Save our Soul.flac
WARNING:whipper.program.cdparanoia:file size 0 did not match expected size 44633948
WARNING:whipper.program.cdparanoia:non-integral amount of frames difference
Traceback (most recent call last):f 9) ... 100 %
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 193, in getTrackQuality
    return min(frames * 2.0 / reads, 1.0)
               ~~~~~~~~~~~~~^~~~~~~
ZeroDivisionError: float division by zero

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.12/site-packages/whipper/extern/task/task.py", line 523, in c
    callable_task(*args, **kwargs)
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 324, in _read
    self._done()
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 400, in _done
    self.quality = self._parser.getTrackQuality()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/site-packages/whipper/program/cdparanoia.py", line 195, in getTrackQuality
    raise RuntimeError("cdparanoia couldn't read any frames "
RuntimeError: cdparanoia couldn't read any frames for the current track
CRITICAL:whipper.command.cd:giving up on track 1 after 5 times

The division by zero should probably be caught.

Using whipper-0.10.0-11.fc39.x86_64, issue is similar to https://github.com/whipper-team/whipper/issues/202

hadess avatar May 06 '24 22:05 hadess

fedora https://bugzilla.redhat.com/show_bug.cgi?id=2260787

migrgh avatar May 09 '24 21:05 migrgh

I don't think this issue is related to the issue above, I believe this can happen for example if cdparanoia cannot rip a track. I think the request is to show a more sensible error, but I am not quite sure what it should be.

MerlijnWajer avatar May 09 '24 21:05 MerlijnWajer

I don't think this issue is related to the issue above,

It's not that libcdio bug, all the other discs can be ripped. This drive didn't like the disc, I tested it in another drive and it worked fine.

I believe this can happen for example if cdparanoia cannot rip a track. I think the request is to show a more sensible error, but I am not quite sure what it should be.

I think that the "cdparanoia couldn't read any frames for the current track" and "giving up..." messages are fine, we just need to get rid of the Python traceback.

hadess avatar May 10 '24 08:05 hadess