bpo-38371: Tkinter: deprecate the split() method. (GH-16584)

This commit is contained in:
Serhiy Storchaka 2019-10-08 14:31:35 +03:00 committed by GitHub
parent d7c387384a
commit d05b000c6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 4 deletions

View File

@ -191,6 +191,11 @@ Deprecated
the module will restrict its seeds to :const:`None`, :class:`int`,
:class:`float`, :class:`str`, :class:`bytes`, and :class:`bytearray`.
* Deprecated the ``split()`` method of :class:`_tkinter.TkappType` in
favour of the ``splitlist()`` method which has more consistent and
predicable behavior.
(Contributed by Serhiy Storchaka in :issue:`38371`.)
Removed
=======

View File

@ -3,6 +3,7 @@ import re
import subprocess
import sys
import os
import warnings
from test import support
# Skip this test if the _tkinter module wasn't built.
@ -573,9 +574,12 @@ class TclTest(unittest.TestCase):
def test_split(self):
split = self.interp.tk.split
call = self.interp.tk.call
self.assertRaises(TypeError, split)
self.assertRaises(TypeError, split, 'a', 'b')
self.assertRaises(TypeError, split, 2)
with warnings.catch_warnings():
warnings.filterwarnings('ignore', r'\bsplit\b.*\bsplitlist\b',
DeprecationWarning)
self.assertRaises(TypeError, split)
self.assertRaises(TypeError, split, 'a', 'b')
self.assertRaises(TypeError, split, 2)
testcases = [
('2', '2'),
('', ''),
@ -617,7 +621,8 @@ class TclTest(unittest.TestCase):
expected),
]
for arg, res in testcases:
self.assertEqual(split(arg), res, msg=arg)
with self.assertWarns(DeprecationWarning):
self.assertEqual(split(arg), res, msg=arg)
def test_splitdict(self):
splitdict = tkinter._splitdict

View File

@ -0,0 +1,3 @@
Deprecated the ``split()`` method in :class:`_tkinter.TkappType` in favour
of the ``splitlist()`` method which has more consistent and predicable
behavior.

View File

@ -2304,6 +2304,12 @@ _tkinter_tkapp_split(TkappObject *self, PyObject *arg)
PyObject *v;
char *list;
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"split() is deprecated; consider using splitlist() instead", 1))
{
return NULL;
}
if (PyTclObject_Check(arg)) {
Tcl_Obj *value = ((PyTclObject*)arg)->value;
int objc;