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.