Sorry to bump into this conversation, but if you want Python 2 and Python 3
compatibility, I think you also need to so something about the "%", since
Python 2.6 there is the str.format() method which is more reliable then
%-formatting (*). More importantly, the "%" will become deprecated in some
future version of python.
There are subtle differences between Python 2 and Python 3. The most
eye-catching aspects are string formatting (now via the str.format()
mini-language), some statement that have become functions (the most irritating
being "print" becoming a function, i.e. Python 2
print "Hello World"
becomes Python 3
print("Hello World")
and similar for other print-like statements. Finally the treatment of lists and
the introduction of view-objects in Python 3, e.g. Python 2:
for elem in dictionary.keys(): do_something_with_elem
should be coded in Python 3 as:
for elem in list(dictionary.keys()): do_something
Most of the subtleties are implicitly handled correctly, but when creating new
code or debugging, it is suggested to move to Python 3 syntax "if reasonably
possible". A good editor/IDE is "ninja-ide" which will give automatic tips
about differences between Python 2 and Python 3.
Cheers,Wilfred
(*) exactly what is "more reliable" is up for debate.
On Tuesday, February 9, 2016 6:34 AM, Bruno Le Floch <[email protected]>
wrote:
On 2/8/16, Philip Taylor <[email protected]> wrote:
> P.S. Experimenting against both versions, I found that what Python 3
> detected as syntax errors in the Version 2 source prevented the test
> from ever being evaluated, but the following three changes allow the
> diagnostic to be issue correctly for both Python 2 and Python 3 :
>
> def BadDVI(msg):
> raise AttributeError, 'Bad DVI file: %s!' % msg
>
> ->
>
> def BadDVI(msg):
> raise (AttributeError, 'Bad DVI file: %s!' % msg)
>
>
> if q <= 0 or q >= 01000000000:
> warning("%s---not loaded, bad scale (%d)!" % (n, q))
> elif d <= 0 or d >= 01000000000:
>
> ->
>
> if q <= 0 or q >= 512:
> warning("%s---not loaded, bad scale (%d)!" % (n, q))
> elif d <= 0 or d >= 512:
>
> ** Phil.
512 doesn't look like the right number (in Python 2, 012345 is octal
12345, not binary). It may be better to use 0o1000000000 which seems
to work in both Python 2 and 3.
Bruno
--------------------------------------------------
Subscriptions, Archive, and List information, etc.:
http://tug.org/mailman/listinfo/xetex
--------------------------------------------------
Subscriptions, Archive, and List information, etc.:
http://tug.org/mailman/listinfo/xetex