Skip to content

Commit e0ed64e

Browse files
gh-152037: Raise ValueError for turtle.degrees(0) instead of ZeroDivisionError
_setDegreesPerAU divided 360 by fullcircle with no check, so the public degrees(0) raised a cryptic ZeroDivisionError. It now raises a clear ValueError. radians() passes math.tau and is unaffected. Adds a regression test and a Misc/NEWS entry.
1 parent 5e0747d commit e0ed64e

3 files changed

Lines changed: 9 additions & 0 deletions

File tree

Lib/test/test_turtle.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,11 @@ def test_radians_and_degrees(self):
368368
self.nav.degrees()
369369
self.assertAlmostEqual(self.nav.heading(), 90)
370370

371+
def test_degrees_zero(self):
372+
# degrees(0) used to raise ZeroDivisionError from 360/fullcircle.
373+
with self.assertRaises(ValueError):
374+
self.nav.degrees(0)
375+
371376
def test_towards(self):
372377

373378
coordinates = [

Lib/turtle.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,6 +1615,8 @@ def _setmode(self, mode=None):
16151615

16161616
def _setDegreesPerAU(self, fullcircle):
16171617
"""Helper function for degrees() and radians()"""
1618+
if fullcircle == 0:
1619+
raise ValueError("fullcircle must be a nonzero number")
16181620
self._fullcircle = fullcircle
16191621
self._degreesPerAU = 360/fullcircle
16201622
if self._mode == "standard":
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :exc:`ZeroDivisionError` in :func:`turtle.degrees` when *fullcircle* is
2+
``0``; it now raises :exc:`ValueError`.

0 commit comments

Comments
 (0)