Jython

Issue2007

classification
Title: from __future__ import print_function doesn't work (at interactive prompt)
Type: behaviour Severity: major
Components: Core Versions: Jython 2.7
Milestone:
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: CecilWesterhof, adamburke, fwierzbicki, irmen, jaraco, pjac, zyasoft
Priority: low Keywords:

Created on 2013年01月19日.13:21:33 by irmen, last changed 2019年05月15日.10:43:09 by adamburke.

Files
File name Uploaded Description Edit Remove
print_doctest.py pjac, 2017年04月05日.15:25:23
Messages
msg7577 (view) Author: Irmen de Jong (irmen) Date: 2013年01月19日.13:21:33
future's print_function doesn't work:
>>> from __future__ import print_function
>>> print("hello", end="test\n")
 File "<stdin>", line 1
 print("hello", end="test\n")
 ^
SyntaxError: no viable alternative at input '='
>>>
Expected :
>>> from __future__ import print_function
>>> print("hello", end="test\n")
hellotest
>>>
msg7579 (view) Author: Irmen de Jong (irmen) Date: 2013年01月19日.13:53:28
Note: this problem only occurs on the interactive prompt, when it is put in a module it works fine.
msg8110 (view) Author: Peter (pjac) Date: 2013年09月09日.13:55:35
Confirming the print_function does not work at the Jython prompt (Mac OS X):
$ ~/jython2.7b1/jython
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52) 
[OpenJDK 64-Bit Server VM (Sun Microsystems Inc.)] on java1.6.0_24
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import print_function
>>> print(1,2,3,4)
(1, 2, 3, 4)
Notice this is being interpreted as a print statement and a tuple.
Furthermore it does not seem to be working via a script which invokes doctests extracted from a file, specifically https://github.com/biopython/biopython/blob/54c1dbe984ef69c129c40be885f66b68836865f2/Tests/test_Tutorial.py from Biopython has stopped working following changes in the test style to use print functions. e.g.
<pre>
$ ~/jython2.7b1/jython test_Tutorial.py
Skipping tests needing the following:
 - numpy
Running Tutorial doctests...
**********************************************************************
File "test_Tutorial.py", line 150, in __main__.TutorialDocTestHolder.doctest_test_from_line_00601
Failed example:
 for index, letter in enumerate(my_seq):
 print(index, letter)
Expected:
 0 G
 1 A
 2 T
 3 C
 4 G
Got:
 (0, 'G')
 (1, 'A')
 (2, 'T')
 (3, 'C')
 (4, 'G')
**********************************************************************
...
</pre>
We have worked around this by modifying the print doctests:
https://github.com/biopython/biopython/commit/8bc8a9478be52b6a48741cd2406f8b210741fe71 
msg8723 (view) Author: Jim Baker (zyasoft) Date: 2014年06月19日.06:14:00
Interestingly, this works fine:
>>> from __future__ import print_function
>>> print(123)
123
But as reported, we still have this bug:
>>> print(1,2,3,4)
(1, 2, 3, 4)
Whereas as CPython works like so:
>>> from __future__ import print_function
>>> print(1,2,3,4)
1 2 3 4
msg8724 (view) Author: Jim Baker (zyasoft) Date: 2014年06月19日.06:14:31
Target beta 4
msg10126 (view) Author: Cecil (CecilWesterhof) Date: 2015年06月21日.12:40:45
At the moment I get:
======================================================================
>>> from __future__ import print_function
>>> print()
()
======================================================================
While it should be:
======================================================================
>>> from __future__ import print_function
>>> print()
======================================================================
msg10532 (view) Author: Jason R. Coombs (jaraco) Date: 2015年12月12日.16:06:24
I'm seeing this behavior not at the interactive prompt. I'm using Jython in Moneydance (using the latest Extension patched for Jython 2.7.0 final https://bitbucket.org/infinitekind/moneydance_open/src/165efb396faffc05618900a7f2cd835f6c582d19?at=master) and I'm importing a module that's in sys.path whose header has `from future import print_function, unicode_literals`. When the program runs, literal strings are unicode but print is an expression. For example,
print("all's", "well")
renders as
(u"all's", u'well')
but should render as 
all's well
So it seems that it's more than just the interactive prompt affected by the print_function future not being recognized.
msg11298 (view) Author: Peter (pjac) Date: 2017年04月05日.15:25:23
I can confirm this does not just fail at the interactive prompt, it also fails in the context of doctests.
Test case provided:
Desired output shown from (Apple provided) Python 2.7.10 on macOS,
$ python print_doctest.py 
Trying:
 print(1, 2, 3)
Expecting:
 1 2 3
ok
1 items passed all tests:
 1 tests in __main__
1 tests in 1 items.
1 passed and 0 failed.
Test passed.
Darwin-16.4.0-x86_64-i386-64bit
2.7.10 (default, Jul 30 2016, 19:40:32) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
Desired output shown from (self-compiled) Python 3.6 on macOS,
$ python3.6 print_doctest.py 
Trying:
 print(1, 2, 3)
Expecting:
 1 2 3
ok
1 items passed all tests:
 1 tests in __main__
1 tests in 1 items.
1 passed and 0 failed.
Test passed.
Darwin-16.4.0-x86_64-i386-64bit
3.6.0 (v3.6.0:41df79263a11, Dec 22 2016, 17:23:13) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)]
Problematic output from Jython 2.7 installed using jython-installer-2.7.0.jar on macOS,
$ jython print_doctest.py 
Trying:
 print(1, 2, 3)
Expecting:
 1 2 3
**********************************************************************
File "print_doctest.py", line 16, in __main__
Failed example:
 print(1, 2, 3)
Expected:
 1 2 3
Got:
 (1, 2, 3)
**********************************************************************
1 items had failures:
 1 of 1 in __main__
1 tests in 1 items.
0 passed and 1 failed.
***Test Failed*** 1 failures.
Java-1.8.0_121-Java_HotSpot-TM-_64-Bit_Server_VM,_25.121-b13,_Oracle_Corporation-on-Mac_OS_X-10.12.3-x86_64
2.7.0 (default:9987c746f838, Apr 29 2015, 02:25:11) 
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)]
The test script:
$ cat print_doctest.py 
"""Jython print_function doctest example.
Under Python 2 by default, print(1, 2, 3) would be seen as
a print statement given a tuple, and give:
 (1, 2, 3)
Under Python 3 by default, it would be seen as a call to the
print function and give:
 1 2 3
Let's try it in a doctest where we've explicitly asked for a
print function via the future import.
 >>> print(1, 2, 3)
 1 2 3
"""
from __future__ import print_function
import doctest
import sys
import platform
doctest.testmod(verbose=2)
print(platform.platform())
print(sys.version)
msg12522 (view) Author: Adam Burke (adamburke) Date: 2019年05月15日.10:43:09
The standalone print operator should also cause a syntax error when using from __future__ import print_function. On the console it doesn't. -c and script works.
C:\Users\Adam\jython\jython6\jython>dist\bin\jython.exe
Jython 2.7.2a1+ (, May 14 2019, 12:59:32)
[OpenJDK 64-Bit Server VM (Oracle Corporation)] on java11.0.1
Type "help", "copyright", "credits" or "license" for more information.
>>> from __future__ import print_function
>>>
>>> print 'test'
test
>>>
C:\Users\Adam\jython\jython6\jython>dist\bin\jython.exe -c "from __future__ import print_function; print 'test' "
 File "<string>", line 1
 from __future__ import print_function; print 'test'
 ^
SyntaxError: no viable alternative at input ''test''
History
Date User Action Args
2019年05月15日 10:43:09adamburkesetnosy: + adamburke
messages: + msg12522
2017年04月05日 15:25:24pjacsetfiles: + print_doctest.py
messages: + msg11298
2015年12月12日 16:06:25jaracosetnosy: + jaraco
messages: + msg10532
2015年06月21日 12:40:45CecilWesterhofsetnosy: + CecilWesterhof
messages: + msg10126
2014年06月19日 06:14:31zyasoftsetmessages: + msg8724
2014年06月19日 06:14:00zyasoftsetnosy: + zyasoft
messages: + msg8723
2013年09月09日 13:55:35pjacsetnosy: + pjac
messages: + msg8110
2013年02月20日 00:23:41fwierzbickisetpriority: low
nosy: + fwierzbicki
versions: + Jython 2.7, - 2.7a2
2013年01月19日 13:53:29irmensetmessages: + msg7579
title: from __future__ import print_function doesn't work -> from __future__ import print_function doesn't work (at interactive prompt)
2013年01月19日 13:21:33irmencreate

Supported by Python Software Foundation,
Powered by Roundup

AltStyle によって変換されたページ (->オリジナル) /