1

I am new to Python, and decided to install Anaconda and Python v3. When I try to run examples I find on-line, they often don't work even when unchanged. I assume that the reason is sometimes that I try to run a version 2 script. What are some easy markers to look for in the code to tell if that is the case?

Student tea
  • 127
  • 6
  • This is very broad; you basically have to learn the differences between 2 / 3. – Simeon Visser Jul 31 '15 at 14:33
  • 1
    You could look for uses of `print` as a statement instead of a function. – Frédéric Hamidi Jul 31 '15 at 14:34
  • 1
    The easiest marker for me is the `print` statement. If its a statement its Python 2 , if its a function its Python 3. – Anand S Kumar Jul 31 '15 at 14:34
  • 4
    `print x` unambiguously identifies a script as Python 2, but `print(x)` doesn't unambiguously identify a script as Python 3, because it's valid syntax in both versions. – Kevin Jul 31 '15 at 14:37
  • 1
    One thing that absolutely marks code as Python3 is function annotations. `def f(a: int, b: list) -> tuple: return (a,b)` will throw a syntax error in python 2 – NightShadeQueen Jul 31 '15 at 15:22

4 Answers4

4

The easiest way (I find) to identify if a script is created for Python 3 vs Python 2 is to try to find a print statement, if the print statement has parentheses around the argument your script is made for Python 3 if not, it is made for Python 2.

E.g.

Python 2 code would look like print "Hello World"

Where Python 3 code would look like print("Hello World")

demongolem
  • 9,474
  • 36
  • 90
  • 105
  • 1
    Yeah, ive been doing way too much C programming and its more of a habit. Ill just edit it out real fast. – Brennan Mcdonald Jul 31 '15 at 14:40
  • As pointed out in a comment above, this is evidence, but not proof. So what else is there to look for? – Student tea Jul 31 '15 at 14:43
  • Unless it's a `Python 2` code and the author used `from __future__ import print_function` – DeepSpace Jul 31 '15 at 14:48
  • 4
    Although this is acceptable as a crude metric, `print("Hello world")` is also valid in Python 2, even without `from __future__ import print_function` and is becoming the preferred expression for those of us who are in some sort of transition from 2 to 3. – tripleee Jul 31 '15 at 14:51
  • And as a remark, for simple scripts, it is easy to write code correct for both Python2 and Python3. So what would they be called ? – Serge Ballesta Jul 31 '15 at 15:11
1

http://python3porting.com/differences.html

This lists the major differences you see betwen python 2 and 3. Mainly functions have been deprecated or renamed.

jgritty
  • 11,660
  • 3
  • 38
  • 60
Austin
  • 23
  • 1
  • 9
1

2to3 is a library which does the "translation" between both language versions. The documentation for the library lists the changes it does to translate python 2 to python 3 code.

The changed print, ne, dict and sys_exc are 4 differences I typically look at.

Daniel
  • 36,610
  • 3
  • 36
  • 69
1

I'll give an SO-valid answer:

Apart from checking shebang (if any), the only sure-proof way is try to compile it with both versions as per How can I check the syntax of Python script without executing it?.

Community
  • 1
  • 1
ivan_pozdeev
  • 33,874
  • 19
  • 107
  • 152