[Python-checkins] bpo-33262: Deprecate passing None for `s` to shlex.split() (GH-6514)
Zackery Spytz
webhook-mailer at python.org
Wed Apr 1 09:59:00 EDT 2020
https://github.com/python/cpython/commit/975ac326ffe265e63a103014fd27e9d098fe7548
commit: 975ac326ffe265e63a103014fd27e9d098fe7548
branch: master
author: Zackery Spytz <zspytz at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-04-01T09:58:55-04:00
summary:
bpo-33262: Deprecate passing None for `s` to shlex.split() (GH-6514)
* bpo-33262: Deprecate passing None for `s` to shlex.split()
This reads the string to split from standard input.
* Update What's New.
* Fix shlex.rst
files:
A Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst
M Doc/library/shlex.rst
M Doc/whatsnew/3.9.rst
M Lib/shlex.py
M Lib/test/test_shlex.py
diff --git a/Doc/library/shlex.rst b/Doc/library/shlex.rst
index adc23da6d491b..7f7f0c7f124ac 100644
--- a/Doc/library/shlex.rst
+++ b/Doc/library/shlex.rst
@@ -36,6 +36,9 @@ The :mod:`shlex` module defines the following functions:
instance, passing ``None`` for *s* will read the string to split from
standard input.
+ .. deprecated:: 3.9
+ Passing ``None`` for *s* will raise an exception in future Python
+ versions.
.. function:: join(split_command)
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 59083da3a262b..6ea4ad89f8c0a 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -624,6 +624,9 @@ Deprecated
by :c:func:`Py_Initialize()` since Python 3.7.
(Contributed by Victor Stinner in :issue:`39877`.)
+* Passing ``None`` as the first argument to the :func:`shlex.split` function
+ has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.)
+
Removed
=======
diff --git a/Lib/shlex.py b/Lib/shlex.py
index c817274583135..4801a6c1d47bd 100644
--- a/Lib/shlex.py
+++ b/Lib/shlex.py
@@ -304,6 +304,10 @@ def __next__(self):
def split(s, comments=False, posix=True):
"""Split the string *s* using shell-like syntax."""
+ if s is None:
+ import warnings
+ warnings.warn("Passing None for 's' to shlex.split() is deprecated.",
+ DeprecationWarning, stacklevel=2)
lex = shlex(s, posix=posix)
lex.whitespace_split = True
if not comments:
diff --git a/Lib/test/test_shlex.py b/Lib/test/test_shlex.py
index a21ccd2fdf44a..3081a785204ed 100644
--- a/Lib/test/test_shlex.py
+++ b/Lib/test/test_shlex.py
@@ -3,7 +3,7 @@
import shlex
import string
import unittest
-
+from unittest import mock
# The original test data set was from shellwords, by Hartmut Goebel.
@@ -162,6 +162,11 @@ def oldSplit(self, s):
tok = lex.get_token()
return ret
+ @mock.patch('sys.stdin', io.StringIO())
+ def testSplitNoneDeprecation(self):
+ with self.assertWarns(DeprecationWarning):
+ shlex.split(None)
+
def testSplitPosix(self):
"""Test data splitting with posix parser"""
self.splitTest(self.posix_data, comments=True)
diff --git a/Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst b/Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst
new file mode 100644
index 0000000000000..2afe13aeb0fca
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-04-17-13-23-29.bpo-33262.vHC7YQ.rst
@@ -0,0 +1,2 @@
+Deprecate passing None as an argument for :func:`shlex.split()`'s ``s``
+parameter. Patch by Zackery Spytz.
More information about the Python-checkins
mailing list