Python Forum
2to3 fails on very simple script
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
2to3 fails on very simple script
#11
(Oct-19-2016, 07:28 AM)buran Wrote:
(Oct-19-2016, 06:51 AM)Skaperen Wrote: true, but that's not the challenge. the challenge is to get code that does the same thing now in python3 and keep it simple. how simple can it be done in python3?  is this the best case?
print('()')
?

well, I start to be confused about all this. If you want the python 3 code to print empty tuple, then it is as follows
print(())
Output:
Python 3.5.2 (default, Jul 17 2016, 00:00:00) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print (()) () >>>
I don't understand why the complications with printing the  str '()'. If you want to print empty tuple, do it...
The original questions was regarding unexpected behaviour using 2to3 tool

Is it tuple? How to address it? It hardly that type(()) should work
"As they say in Mexico 'dosvidaniya'. That makes two vidaniyas."
https://freedns.afraid.org
Reply
#12
Is it tuple? - What else do you think it is? :-)
Reply
#13
(Oct-19-2016, 12:56 PM)buran Wrote: Is it tuple? - What else do you think it is? :-)

Well,
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = print(())
()
>>> type(a)
<class 'NoneType'>
>>> b = print(),

>>> type(b)
<class 'tuple'>
>>>
>>> c = print(()),
()
>>> type(c)
<class 'tuple'>
>>>
If it ain't broke, I just haven't gotten to it yet.
OS: Windows 10, openSuse 42.3, freeBSD 11, Raspian "Stretch"
Python 3.6.5, IDE: PyCharm 2018 Community Edition
Reply
#14
(Oct-19-2016, 01:40 PM)sparkz_alot Wrote:
(Oct-19-2016, 12:56 PM)buran Wrote: Is it tuple? - What else do you think it is? :-)

Well,
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\>python
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = print(())
()
>>> type(a)
<class 'NoneType'>
>>> b = print(),

>>> type(b)
<class 'tuple'>
>>>
>>> c = print(()),
()
>>> type(c)
<class 'tuple'>
>>>

In your example a is None, because that is the default return value of each function.
b and c are single element tuples, because of that comma you add at the end of the line. Note that first and only element of the both is exactly the same None returned by the print function.
Hope the following example helps
Output:
Python 3.5.2 (default, Jul 17 2016, 00:00:00) [GCC 4.8.4] on linuxType "help", "copyright", "credits" or "license" for more information. >>> a = print(())() >>> print(print(())) () None >>> b = print(), >>> print(b) (None,) >>> c = print(()), () >>> print(c) (None,)
Note the code
print(print(()))
and the output
Output:
() None
inner print function prints the tuple, then the outer functions prints the return value from the inner one - i.e. None
same as in this
Output:
>>> print(print('something')) something None >>>
Reply
#15
Yes, I understand, I was pointing out the the example "print(())" is actually not a tuple
If it ain't broke, I just haven't gotten to it yet.
OS: Windows 10, openSuse 42.3, freeBSD 11, Raspian "Stretch"
Python 3.6.5, IDE: PyCharm 2018 Community Edition
Reply
#16
(Oct-19-2016, 03:36 PM)sparkz_alot Wrote: Yes, I understand, I was pointing out the the example "print(())" is actually not a tuple

the output, i.e.
Output:
()
IS EXACTLY the string representation of the tuple class (empty tuple instance to be precise)
Reply
#17
(Oct-19-2016, 03:53 PM)buran Wrote:
(Oct-19-2016, 03:36 PM)sparkz_alot Wrote: Yes, I understand, I was pointing out the the example "print(())" is actually not a tuple

the output, i.e.
Output:
()
IS EXACTLY the string representation of the tuple class (empty tuple instance to be precise)

Logically, one would think so, but Python does not. As shown in my example, Python see it as class 'NoneType', not class 'tuple'
If it ain't broke, I just haven't gotten to it yet.
OS: Windows 10, openSuse 42.3, freeBSD 11, Raspian "Stretch"
Python 3.6.5, IDE: PyCharm 2018 Community Edition
Reply
#18
(Oct-19-2016, 04:11 PM)sparkz_alot Wrote:
(Oct-19-2016, 03:53 PM)buran Wrote:
(Oct-19-2016, 03:36 PM)sparkz_alot Wrote: Yes, I understand, I was pointing out the the example "print(())" is actually not a tuple

the output, i.e.
Output:
()
IS EXACTLY the string representation of the tuple class (empty tuple instance to be precise)

Logically, one would think so, but Python does not. As shown in my example, Python see it as class 'NoneType', not class 'tuple'

You DO make difference between the type of the argument you pass to the print function and the type of the return value of the function, right? If you don't make that difference, then I don't see how I can explain it better

Output:
>>> type(print('something')) something <class 'NoneType'>
You would not say that 'something' is of NoneType, right?
Reply
#19
b is a tuple
>>> b = ()
>>> a = print(b)
()
>>> type(a), type(b)
(<class 'NoneType'>, <class 'tuple'>)
Reply
#20
(Oct-19-2016, 04:11 PM)sparkz_alot Wrote: Yes, I understand, I was pointing out the the example "print(())" is actually not a tuple
Logically, one would think so, but Python does not. As shown in my example, Python see it as class 'NoneType', not class 'tuple'
print function is returning a tuple,but it's in stdout which is not catch in the variable.
Variable catch only return type from function.
The print function has no return value def print(*args, sep=' ', end='\n', file=None)
print function is not meant to be stored in a variable,no return in function.
If look at it in an another way,foo is returning an integer but we only catch None('NoneType').
>>> def foo():
...     print(999)
...     

>>> a = foo()
999
>>> repr(a)
'None'
>>> type(a)
<class 'NoneType'
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Simple Python script, path not defined dubinaone 3 2,692 Nov-06-2021, 07:36 PM
Last Post: snippsat
  Need help creating a simple script Nonameface 12 4,534 Jul-14-2020, 02:10 PM
Last Post: BitPythoner
  Python 3.6.10 fails when running a localized script. Mikee 2 2,127 Jul-09-2020, 10:25 PM
Last Post: Mikee
  Simple text to binary python script gmills13 2 2,816 Feb-04-2020, 08:44 PM
Last Post: snippsat
  python script fails with a lot of data bluethundr 2 2,140 Nov-11-2019, 01:35 PM
Last Post: bluethundr
  Made a simple script for android (really simple) but it is not running anddontyoucomebacknomore 2 2,359 Mar-06-2019, 12:19 AM
Last Post: anddontyoucomebacknomore
  How to use 2to3.py converter under Windows OS samsonite 2 7,296 Mar-02-2019, 05:49 AM
Last Post: samsonite
  Confusing output from 2to3 about what files need change Moonwatcher 1 4,825 Dec-30-2018, 04:07 PM
Last Post: Gribouillis
  Error during 2to3 conversion krow4869 3 3,972 Oct-14-2018, 08:19 AM
Last Post: Larz60+
  Simple script that seems to misbehave? Nwb 1 2,333 Jun-10-2018, 05:30 AM
Last Post: Nwb

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020