@@ -1507,6 +1507,61 @@ def f():
1507
1507
1508
1508
self .assertNotIn ("somethingverywronghehe" , err .getvalue ())
1509
1509
1510
+ def test_name_error_bad_suggestions_do_not_trigger_for_small_names (self ):
1511
+ vvv = mom = w = id = pytho = None
1512
+
1513
+ with self .subTest (name = "b" ):
1514
+ try :
1515
+ b
1516
+ except NameError as exc :
1517
+ with support .captured_stderr () as err :
1518
+ sys .__excepthook__ (* sys .exc_info ())
1519
+ self .assertNotIn ("you mean" , err .getvalue ())
1520
+ self .assertNotIn ("vvv" , err .getvalue ())
1521
+ self .assertNotIn ("mom" , err .getvalue ())
1522
+ self .assertNotIn ("'id'" , err .getvalue ())
1523
+ self .assertNotIn ("'w'" , err .getvalue ())
1524
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1525
+
1526
+ with self .subTest (name = "v" ):
1527
+ try :
1528
+ v
1529
+ except NameError as exc :
1530
+ with support .captured_stderr () as err :
1531
+ sys .__excepthook__ (* sys .exc_info ())
1532
+ self .assertNotIn ("you mean" , err .getvalue ())
1533
+ self .assertNotIn ("vvv" , err .getvalue ())
1534
+ self .assertNotIn ("mom" , err .getvalue ())
1535
+ self .assertNotIn ("'id'" , err .getvalue ())
1536
+ self .assertNotIn ("'w'" , err .getvalue ())
1537
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1538
+
1539
+ with self .subTest (name = "m" ):
1540
+ try :
1541
+ m
1542
+ except NameError as exc :
1543
+ with support .captured_stderr () as err :
1544
+ sys .__excepthook__ (* sys .exc_info ())
1545
+ self .assertNotIn ("you mean" , err .getvalue ())
1546
+ self .assertNotIn ("vvv" , err .getvalue ())
1547
+ self .assertNotIn ("mom" , err .getvalue ())
1548
+ self .assertNotIn ("'id'" , err .getvalue ())
1549
+ self .assertNotIn ("'w'" , err .getvalue ())
1550
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1551
+
1552
+ with self .subTest (name = "py" ):
1553
+ try :
1554
+ py
1555
+ except NameError as exc :
1556
+ with support .captured_stderr () as err :
1557
+ sys .__excepthook__ (* sys .exc_info ())
1558
+ self .assertNotIn ("you mean" , err .getvalue ())
1559
+ self .assertNotIn ("vvv" , err .getvalue ())
1560
+ self .assertNotIn ("mom" , err .getvalue ())
1561
+ self .assertNotIn ("'id'" , err .getvalue ())
1562
+ self .assertNotIn ("'w'" , err .getvalue ())
1563
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1564
+
1510
1565
def test_name_error_suggestions_do_not_trigger_for_too_many_locals (self ):
1511
1566
def f ():
1512
1567
# Mutating locals() is unreliable, so we need to do it by hand
@@ -1661,6 +1716,63 @@ class A:
1661
1716
1662
1717
self .assertNotIn ("blech" , err .getvalue ())
1663
1718
1719
+ def test_getattr_error_bad_suggestions_do_not_trigger_for_small_names (self ):
1720
+ class MyClass :
1721
+ vvv = mom = w = id = pytho = None
1722
+
1723
+ with self .subTest (name = "b" ):
1724
+ try :
1725
+ MyClass .b
1726
+ except AttributeError as exc :
1727
+ with support .captured_stderr () as err :
1728
+ sys .__excepthook__ (* sys .exc_info ())
1729
+ self .assertNotIn ("you mean" , err .getvalue ())
1730
+ self .assertNotIn ("vvv" , err .getvalue ())
1731
+ self .assertNotIn ("mom" , err .getvalue ())
1732
+ self .assertNotIn ("'id'" , err .getvalue ())
1733
+ self .assertNotIn ("'w'" , err .getvalue ())
1734
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1735
+
1736
+ with self .subTest (name = "v" ):
1737
+ try :
1738
+ MyClass .v
1739
+ except AttributeError as exc :
1740
+ with support .captured_stderr () as err :
1741
+ sys .__excepthook__ (* sys .exc_info ())
1742
+ self .assertNotIn ("you mean" , err .getvalue ())
1743
+ self .assertNotIn ("vvv" , err .getvalue ())
1744
+ self .assertNotIn ("mom" , err .getvalue ())
1745
+ self .assertNotIn ("'id'" , err .getvalue ())
1746
+ self .assertNotIn ("'w'" , err .getvalue ())
1747
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1748
+
1749
+ with self .subTest (name = "m" ):
1750
+ try :
1751
+ MyClass .m
1752
+ except AttributeError as exc :
1753
+ with support .captured_stderr () as err :
1754
+ sys .__excepthook__ (* sys .exc_info ())
1755
+ self .assertNotIn ("you mean" , err .getvalue ())
1756
+ self .assertNotIn ("vvv" , err .getvalue ())
1757
+ self .assertNotIn ("mom" , err .getvalue ())
1758
+ self .assertNotIn ("'id'" , err .getvalue ())
1759
+ self .assertNotIn ("'w'" , err .getvalue ())
1760
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1761
+
1762
+ with self .subTest (name = "py" ):
1763
+ try :
1764
+ MyClass .py
1765
+ except AttributeError as exc :
1766
+ with support .captured_stderr () as err :
1767
+ sys .__excepthook__ (* sys .exc_info ())
1768
+ self .assertNotIn ("you mean" , err .getvalue ())
1769
+ self .assertNotIn ("vvv" , err .getvalue ())
1770
+ self .assertNotIn ("mom" , err .getvalue ())
1771
+ self .assertNotIn ("'id'" , err .getvalue ())
1772
+ self .assertNotIn ("'w'" , err .getvalue ())
1773
+ self .assertNotIn ("'pytho'" , err .getvalue ())
1774
+
1775
+
1664
1776
def test_getattr_suggestions_do_not_trigger_for_big_dicts (self ):
1665
1777
class A :
1666
1778
blech = None
0 commit comments