diff --git a/Doc/library/turtle.rst b/Doc/library/turtle.rst index fea6b57edf0f1f..5e436a68ba8cbb 100644 --- a/Doc/library/turtle.rst +++ b/Doc/library/turtle.rst @@ -1079,6 +1079,8 @@ Drawing state :param width: a positive number + :raises TurtleGraphicsError: If *width* is less than zero. + Set the line thickness to *width* or return it. If resizemode is set to "auto" and turtleshape is a polygon, that polygon is drawn with the same line thickness. If no argument is given, the current pensize is returned. @@ -1090,6 +1092,9 @@ Drawing state 1 >>> turtle.pensize(10) # from here on lines of width 10 are drawn + .. versionchanged:: next + Raise :exc:`TurtleGraphicsError` if *width* is less than zero. + .. function:: pen(pen=None, **pendict) diff --git a/Lib/test/test_turtle.py b/Lib/test/test_turtle.py index d02cac284a909a..91786eee2c7ffb 100644 --- a/Lib/test/test_turtle.py +++ b/Lib/test/test_turtle.py @@ -480,6 +480,25 @@ def test_teleport(self): tpen.teleport(-100, -100, fill_gap=fill_gap_value) self.assertTrue(tpen.isdown()) + def test_pensize_with_positive_numbers(self): + tpen = turtle.TPen() + + tpen.pensize(42) + self.assertEqual(42, tpen.pensize()) + + def test_pensize_with_nonpositive_numbers(self): + tpen = turtle.TPen() + + tpen.pensize(0) + self.assertEqual(0, tpen.pensize()) + + width = -1 + msg = f"width argument must be a positive number, but got {width}." + with self.assertRaisesRegex(turtle.TurtleGraphicsError, re.escape(msg)): + tpen.pensize(width) + + self.assertEqual(0, tpen.pensize()) + class TestTurtleScreen(unittest.TestCase): def test_save_raises_if_wrong_extension(self) -> None: diff --git a/Lib/turtle.py b/Lib/turtle.py index e88981d298ad52..6537363faa1619 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -2141,7 +2141,11 @@ def pensize(self, width=None): """ if width is None: return self._pensize - self.pen(pensize=width) + elif width < 0: + msg = f"width argument must be a positive number, but got {width}." + raise TurtleGraphicsError(msg) + else: + self.pen(pensize=width) def penup(self): diff --git a/Misc/NEWS.d/next/Library/2025-06-09-08-11-47.gh-issue-133244.GINMl-.rst b/Misc/NEWS.d/next/Library/2025-06-09-08-11-47.gh-issue-133244.GINMl-.rst new file mode 100644 index 00000000000000..f547b0799d2943 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-06-09-08-11-47.gh-issue-133244.GINMl-.rst @@ -0,0 +1 @@ +:meth:`!turtle.TPen.pensize` raises an exception if called with a negative *width* argument.