[New-bugs-announce] [issue34874] Python 3.6.3 command script wrapped in single quotes produces NameError: name 'A' is not defined

Tim McDonough report at bugs.python.org
Tue Oct 2 17:38:40 EDT 2018


New submission from Tim McDonough <tmcdonoughtx at gmail.com>:

I found an odd behavior that seems to be limited to Python 3.6.3. 
Python 3.6.3 command scripts seem to prefer wrapping in double quotes instead of single quotes.

Here is an example of the error.  

$ echo -n '{"A":"a"}' | python3 -c 'import sys,json; j=json.load(sys.stdin); print(j["A"])'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'A' is not defined

# Swapping single and double quotes works as expected.
#
$ echo -n '{"A":"a"}' | python3 -c "import sys,json; j=json.load(sys.stdin); print(j['A'])"
a

# Executing the original, failing script against python 2.6.6 works.
#
$ echo -n '{"A":"a"}' | python2 -c 'import sys,json; j=json.load(sys.stdin); print(j["A"])'
a

The failing environment is:
$ bash --version
GNU bash, version 4.1.2(2)-release (x86_64-redhat-linux-gnu)
$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-23)

These python versions also seem to work fine: 2.6.6, 2.7.9, 3.5.1, and 3.5.2.
Assigning the script to an environment variable follows the single/double quote issue. For example, this fails:

$ export python_script='import sys,json; j=json.load(sys.stdin); print(j["A"])'
$ echo -n '{"A": "a"}' | python3 -c "${python_script}"

This would be a good unit test candidate if not already present.

----------
components: Tests
messages: 326916
nosy: Tim McDonough
priority: normal
severity: normal
status: open
title: Python 3.6.3 command script wrapped in single quotes produces NameError: name 'A' is not defined
type: behavior
versions: Python 3.6

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue34874>
_______________________________________


More information about the New-bugs-announce mailing list