OSCON 2008: Porting to Python 3.0

334

description

 

Transcript of OSCON 2008: Porting to Python 3.0

Page 1: OSCON 2008: Porting to Python 3.0
Page 2: OSCON 2008: Porting to Python 3.0

!"#$%&'($"(!)$*"&(+,-

.&$*"&)(/01$2#

!"#$%"&'(&#$%")%*+

!*,'+%%+-.)/%0

Page 3: OSCON 2008: Porting to Python 3.0

$*232(34%5236

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 4: OSCON 2008: Porting to Python 3.0

%&$#"578$%"&

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 5: OSCON 2008: Porting to Python 3.0

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 6: OSCON 2008: Porting to Python 3.0

903$(#242032(:'#

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 7: OSCON 2008: Porting to Python 3.0

&"$(;"#(<,=>+,-

Page 8: OSCON 2008: Porting to Python 3.0

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 9: OSCON 2008: Porting to Python 3.0

80?20$

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 10: OSCON 2008: Porting to Python 3.0

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 11: OSCON 2008: Porting to Python 3.0

39"@23:0&

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 12: OSCON 2008: Porting to Python 3.0

39"@23:0&

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 13: OSCON 2008: Porting to Python 3.0

57*www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 14: OSCON 2008: Porting to Python 3.0

"#(&"$,,,

www.interlink.com.au/anthony/tech/talks/OSCON2008

Page 15: OSCON 2008: Porting to Python 3.0

A.BC

Page 16: OSCON 2008: Porting to Python 3.0

9)$*"&(+,-!)$*"&(+---0@0(!)+@0@0(9+)@

Page 17: OSCON 2008: Porting to Python 3.0

+,-

Page 18: OSCON 2008: Porting to Python 3.0

D*2#2(D2(E#20@044()"7#(8"52

Page 19: OSCON 2008: Porting to Python 3.0
Page 20: OSCON 2008: Porting to Python 3.0

%$F3(&"$($*0$(E05

Page 21: OSCON 2008: Porting to Python 3.0

G%&(0('""5(80732

Page 22: OSCON 2008: Porting to Python 3.0

9#":%32H

Page 23: OSCON 2008: Porting to Python 3.0

E08@D0#53(%&8":90$%E42

Page 24: OSCON 2008: Porting to Python 3.0

I7%$2(0(4"$

Page 25: OSCON 2008: Porting to Python 3.0

%:9#28%32:"#2(9#28%324)6

Page 26: OSCON 2008: Porting to Python 3.0

04:"3$(2?2#)(9#"'#0:D%44(&225(8*0&'23

Page 27: OSCON 2008: Porting to Python 3.0

04:"3$(2?2#)(9#"'#0:D%44(&225(8*0&'23

Page 28: OSCON 2008: Porting to Python 3.0

!.

Page 29: OSCON 2008: Porting to Python 3.0

E7$(J3$

Page 30: OSCON 2008: Porting to Python 3.0

3":2(K73$%L80$%"&

Page 31: OSCON 2008: Porting to Python 3.0

3":2(#0$%"&04%M0$%"&3

Page 32: OSCON 2008: Porting to Python 3.0

!)$*"&6(J=()20#3("45

Page 33: OSCON 2008: Porting to Python 3.0

L#3$(#242032(JNNJ

Page 34: OSCON 2008: Porting to Python 3.0

E>D(8":90$(%:9"#$0&$

Page 35: OSCON 2008: Porting to Python 3.0

9#2OJ,-4"$3(";(8*0&'23

Page 36: OSCON 2008: Porting to Python 3.0

J,-(!(<,-

Page 37: OSCON 2008: Porting to Python 3.0

-12#)!((."345

2%/6.#),1"345

Page 38: OSCON 2008: Porting to Python 3.0

:052($*2:(0'#22(D%$*(5"83

Page 39: OSCON 2008: Porting to Python 3.0

<,-(!(<,=

Page 40: OSCON 2008: Porting to Python 3.0

&"(E>D(%&8":90$%E42(8*0&'23

Page 41: OSCON 2008: Porting to Python 3.0

D244P(&"&2(%:9"#$0&$

Page 42: OSCON 2008: Porting to Python 3.0

$"(97E4%3*25(.!B3P(0&)D0)

Page 43: OSCON 2008: Porting to Python 3.0

940)(D%$*(%&$2#&043'2$(*7#$

Page 44: OSCON 2008: Porting to Python 3.0

4%@2(044(J=()20#("453

Page 45: OSCON 2008: Porting to Python 3.0

0&&")%&';20$7#23

Page 46: OSCON 2008: Porting to Python 3.0

+,-

Page 47: OSCON 2008: Porting to Python 3.0

$*2(8*0&82($"(L1($*%&'3

Page 48: OSCON 2008: Porting to Python 3.0

:%3$0%@23

Page 49: OSCON 2008: Porting to Python 3.0

5794%80$%"&5794%80$%"&

Page 50: OSCON 2008: Porting to Python 3.0

K73$O940%&O7'4)

Page 51: OSCON 2008: Porting to Python 3.0

:%3$0@23

Page 52: OSCON 2008: Porting to Python 3.0

/%.*/.45&"(732($"(0&)"&2

Page 53: OSCON 2008: Porting to Python 3.0

E08@$%8@3

Page 54: OSCON 2008: Porting to Python 3.0

5794%80$%"&

Page 55: OSCON 2008: Porting to Python 3.0

QRRSQTB

Page 56: OSCON 2008: Porting to Python 3.0

!*2#2F3"&4)"&2#0)!"$"(%$

Page 57: OSCON 2008: Porting to Python 3.0

&"$($#72

Page 58: OSCON 2008: Porting to Python 3.0

0!(45

4%3$(8":9#2*2&3%"&3

Page 59: OSCON 2008: Porting to Python 3.0

3$#%&'(:2$*"53

3$#%&'(;7&8$%"&3

Page 60: OSCON 2008: Porting to Python 3.0

!((-&47%%89!*+2896:!*+25

7%%4;!*+289;;6:!*+25

Page 61: OSCON 2008: Porting to Python 3.0

2:0%4(908@0'2

#;8U<<(:"5742

Page 62: OSCON 2008: Porting to Python 3.0

*"D(5%5($*%3(*0992&V

Page 63: OSCON 2008: Porting to Python 3.0

D2(420#&25

Page 64: OSCON 2008: Porting to Python 3.0

W8

Page 65: OSCON 2008: Porting to Python 3.0

$*2(7'4)

Page 66: OSCON 2008: Porting to Python 3.0

<,!/6#1/62<#29#XY

Page 67: OSCON 2008: Porting to Python 3.0

2D*0#5($"(#205

;"#:0$$25(D#"&'

Page 68: OSCON 2008: Porting to Python 3.0

*.3=/.452=045(#2940823(NZ[(";(7323

Page 69: OSCON 2008: Porting to Python 3.0

(*1"#9>>92&2)2#3.**89?%$9"%.2@

Page 70: OSCON 2008: Porting to Python 3.0

8*0&'23(055(E4"0$

Page 71: OSCON 2008: Porting to Python 3.0

3:0442#(40&'70'2\\

E2$$2#(40&'70'2

Page 72: OSCON 2008: Porting to Python 3.0

]9)$*"&(L$3(%&()"7#(E#0%&^

Page 73: OSCON 2008: Porting to Python 3.0

203%2#($"(732203%2#($"(420#&

Page 74: OSCON 2008: Porting to Python 3.0

D*"(D%&3V

Page 75: OSCON 2008: Porting to Python 3.0

_`aa(<--U

Page 76: OSCON 2008: Porting to Python 3.0

9#";233%"&04(9#"'#0::2#3

Page 77: OSCON 2008: Porting to Python 3.0
Page 78: OSCON 2008: Porting to Python 3.0

E7%4$%&3E)(?2#3%"&

Page 79: OSCON 2008: Porting to Python 3.0

J,-,J(XJNNbY6(b-

J,Z,<(XJNNNY6(Zb

<,J(X<--JY6(=N

<,Z(X<--=Y6(U<

Page 80: OSCON 2008: Porting to Python 3.0

40&'70'2(8":9421%$)

$

Page 81: OSCON 2008: Porting to Python 3.0

$*%&'3(D2F?2(420#&25

Page 82: OSCON 2008: Porting to Python 3.0

3$5%"(&"$($*2(E23$

Page 83: OSCON 2008: Porting to Python 3.0

"9$%"&04(7&%8"52\\(E05&233

Page 84: OSCON 2008: Porting to Python 3.0

3",,,

Page 85: OSCON 2008: Porting to Python 3.0

9"#$%&'($"(+,-

Page 86: OSCON 2008: Porting to Python 3.0

<,1

!

<,=

!

+,-

Page 87: OSCON 2008: Porting to Python 3.0

<,=

Page 88: OSCON 2008: Porting to Python 3.0

%&$2#%:(#242032

Page 89: OSCON 2008: Porting to Python 3.0

30:2(50)(03(+,-

Page 90: OSCON 2008: Porting to Python 3.0

9)$*"&(<,=(O+$7#&3("&(D0#&%&'3

Page 91: OSCON 2008: Porting to Python 3.0

>>>9AB)$!2C6.&4D5

CC0!1"CCEDE9F.(*./!#1%"G!*"1"+E931/#)$!2C6.&459"%#92=((%*#.39

1"9H)IJ9=2.9#$.91"9%(.*!#%*

Page 92: OSCON 2008: Porting to Python 3.0

9)$*"&<,=7*%09CC7=#=*.CC

Page 93: OSCON 2008: Porting to Python 3.0

9)$*"&<,=

7*%097=#=*.C,=1-#1"2910(%*#

Page 94: OSCON 2008: Porting to Python 3.0

2&0E423(3":2(E08@9"#$3

Page 95: OSCON 2008: Porting to Python 3.0

<$"+3*%93(D%$*(<,=P(+,-

Page 96: OSCON 2008: Porting to Python 3.0

:28*0&%804(#2D#%$23

Page 97: OSCON 2008: Porting to Python 3.0

*0&5423(0(4"$

Page 98: OSCON 2008: Porting to Python 3.0

&2?2#('"%&'($"(E2(92#;28$

Page 99: OSCON 2008: Porting to Python 3.0

7&%$($23$3

Page 100: OSCON 2008: Porting to Python 3.0

"&$"($*2(8*0&'23

Page 101: OSCON 2008: Porting to Python 3.0

40&'70'2(8*0&'23

Page 102: OSCON 2008: Porting to Python 3.0

#2:"?256

Page 103: OSCON 2008: Porting to Python 3.0

K>!

LM

2to3

Page 104: OSCON 2008: Porting to Python 3.0

$*2(:"3$(E03%8(8*0&'2<$"+(*0&5423(%$

2to3

Page 105: OSCON 2008: Porting to Python 3.0

_"$2($*%3(

2to3

Page 106: OSCON 2008: Porting to Python 3.0

<,!/6#1/62<!

*.(*45

2to3

Page 107: OSCON 2008: Porting to Python 3.0

#2:"?2569#%&$(3$0$2:2&$

Page 108: OSCON 2008: Porting to Python 3.0

RcdSQA//eV

Page 109: OSCON 2008: Porting to Python 3.0

(*1"#45(&"D(0(;7&8$%"&

Page 110: OSCON 2008: Porting to Python 3.0

(*1"#9!89,89/

!

(*1"#4!89,89/5

Page 111: OSCON 2008: Porting to Python 3.0

(*1"#9>>97(892%0.%=#(=#

!

(*1"#42%0.%=#(=#8971-.M7(5

Page 112: OSCON 2008: Porting to Python 3.0

(*1"#9>>

0E":%&0$%"&

]`GG(5"23(%$^

$*0$(:0@23(%$(!"#$%

Page 113: OSCON 2008: Porting to Python 3.0

9#%&$(3":2?0472P

!

(*1"#42%0.N!-=.89."3MO9O5

Page 114: OSCON 2008: Porting to Python 3.0

&2D(9#%&$(;20$7#26873$":%M2(3290#0$"#3

Page 115: OSCON 2008: Porting to Python 3.0

#!+MO,-1"6O

(*1"#4OKO89#!+89O>O892.(MOO5

(((((((!OK,-1"6>O

Page 116: OSCON 2008: Porting to Python 3.0

(*1"#9O8O)P%1"44!8,8/8355

!

(*1"#4!8,8/83892.(MO8O5

Page 117: OSCON 2008: Porting to Python 3.0

<,=

7*%09CC7=#=*.CC910(%*#9(*1"#C7="/#1%"

Page 118: OSCON 2008: Porting to Python 3.0

&2D(3$#%&'(;"#:0$$%&'

Page 119: OSCON 2008: Porting to Python 3.0

2#*)7%*0!#45(:2$*"5

Page 120: OSCON 2008: Porting to Python 3.0

?"!0.E9AQB9ADB@)7%*0!#471*2#8-!2#5

Page 121: OSCON 2008: Porting to Python 3.0

70#9M9?A"=0B9A1#.0B@

70#)7%*0!#4"=0MH891#.0M@2$..(@5

Page 122: OSCON 2008: Porting to Python 3.0

;"#:0$XY(E7%4$%&

Page 123: OSCON 2008: Porting to Python 3.0

>>>97%*0!#4H)Q89RQS)D7R5

TQQQH)QT

Page 124: OSCON 2008: Porting to Python 3.0

&2D(@2)D"#56("%"-%/!-

Page 125: OSCON 2008: Porting to Python 3.0

)"7(0%&F$(;#":(#"7&5(*2#2

Page 126: OSCON 2008: Porting to Python 3.0

!)$*"&(<,16(80&(#205(;#":(2&84"3%&'(38"923

Page 127: OSCON 2008: Porting to Python 3.0

80&F$(D#%$2($"($*2:

Page 128: OSCON 2008: Porting to Python 3.0

$*0$F3(D*2#2("%"-%/!-(8":23(%&

Page 129: OSCON 2008: Porting to Python 3.0

3.79."/-%21"+45E

9999!MU

99993.791"".*45E

99999999"%"-%/!-9!

99999999!9M9V

99991"".*45

9999(*1"#4!5

⇒9V

Page 130: OSCON 2008: Porting to Python 3.0

&2D(@2)D"#536!2

W*=.

X!-2.

Y%".

Page 131: OSCON 2008: Porting to Python 3.0

>>>9X!-2.MD

99X1-.9RK2#31">R89-1".9D

Z&"#!I[**%*E9!221+"0."#9#%96.&:%*3

Page 132: OSCON 2008: Porting to Python 3.0

f03F(D03(04#205)(0(@%&50O@2)D"#5

Page 133: OSCON 2008: Porting to Python 3.0

E03%8($)923

Page 134: OSCON 2008: Porting to Python 3.0

3$#%&'3

Page 135: OSCON 2008: Porting to Python 3.0

30)(R4g($"hijklmn

Page 136: OSCON 2008: Porting to Python 3.0

7&%k"52(3$#%&'3(52;074$

Page 137: OSCON 2008: Porting to Python 3.0

<,1(:%125(3$#o&'($)9235%303$#"73

Page 138: OSCON 2008: Porting to Python 3.0

3D%$8*%&'(9#"57825(p7E$42(:%3$0@23

Page 139: OSCON 2008: Porting to Python 3.0

E0323$#%&'('"&23924$(f2#*F(&"D

2to3

Page 140: OSCON 2008: Porting to Python 3.0

<,=

>>>97*%09CC7=#=*.CC910(%*#9="1/%3.C-1#.*!-2

>>>9#&(.4TT5

K#&(.9T="1/%3.T>

Page 141: OSCON 2008: Porting to Python 3.0

E7$

Page 142: OSCON 2008: Porting to Python 3.0

3":2$%:23()"7(D0&$(E)$23

Page 143: OSCON 2008: Porting to Python 3.0

&2$D"#@(9#"$"8"43E%&0#)(L42(;"#:0$3

Page 144: OSCON 2008: Porting to Python 3.0

,&#.245($"($*2(#23872

Page 145: OSCON 2008: Porting to Python 3.0

E)$2(4%$2#043

,O\[]^90!1-)(&#$%")%*+O

7323(52;074$(2&8"5%&'(6OX

Page 146: OSCON 2008: Porting to Python 3.0

,&#.24_QIQ`89QIQa89QIbQc5

0&)(%$2#0E42(9#"578%&'(-O<Z=

Page 147: OSCON 2008: Porting to Python 3.0

,&#.242%0.2#*1"+89."/%31"+5

Page 148: OSCON 2008: Porting to Python 3.0

2194%8%$(%3(E2$$2#($*0&(%:94%8%$

Page 149: OSCON 2008: Porting to Python 3.0

90#$%8740#4)(%&($*%3(8032

Page 150: OSCON 2008: Porting to Python 3.0

2&8"5%&'('7233%&';#07'*$(D%$*(92#%4

Page 151: OSCON 2008: Porting to Python 3.0

#29#XY(9#"57823(7&%8"52

Page 152: OSCON 2008: Porting to Python 3.0

&2D(!2/1145(E7%4$%&0&5(]d!^(3$#%&'(;"#:0$

Page 153: OSCON 2008: Porting to Python 3.0

"&2(403$(9"%&$"&(7&%8"526

Page 154: OSCON 2008: Porting to Python 3.0

&"&O.a`BB(%52&$%L2#3

Page 155: OSCON 2008: Porting to Python 3.0

99>>>9,e*6,e*6,e*6MW*=.

99>>>9(*1"#4,f*6,f*6,e*65

99W*=.

Page 156: OSCON 2008: Porting to Python 3.0

X3"7#82(L4236(qQAOU(E)(52;074$Y

Page 157: OSCON 2008: Porting to Python 3.0

&7:E2#3

Page 158: OSCON 2008: Porting to Python 3.0

&"(:"#2(-%"+45

2to3

Page 159: OSCON 2008: Porting to Python 3.0

%&$3(0#2(4"&'3(E)(52;074$

Page 160: OSCON 2008: Porting to Python 3.0

>>>92&2)0!I1"#

W*!/.,!/6940%2#9*./."#9/!--9-!2#5E

99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>

`##*1,=#.[**%*E9T0%3=-.T9%,P./#9$!29"%9

!##*1,=#.9T0!I1"#T

Page 161: OSCON 2008: Porting to Python 3.0

&"(:"#2(J<+CP(2%$*2#

2to3

Page 162: OSCON 2008: Porting to Python 3.0

%&$2'2#(5%?%3%"&

Page 163: OSCON 2008: Porting to Python 3.0

>>>9Dgb

Q)V

Page 164: OSCON 2008: Porting to Python 3.0

"45O3$)426

999>>>9Dggb

999Q

Page 165: OSCON 2008: Porting to Python 3.0

$#72(5%?%3%"&(*03(E22&(]8":%&'(3""&^

3%&82(<,<

Page 166: OSCON 2008: Porting to Python 3.0

,,,(%&(<--J

Page 167: OSCON 2008: Porting to Python 3.0

$7#&("&(&2D(5%?%3%"&

(&#$%"b)I9hi".:

Page 168: OSCON 2008: Porting to Python 3.0

5%8$3

Page 169: OSCON 2008: Porting to Python 3.0

"E?%"73(8*0&'26520$*($"($!2C6.&45

!

6.&91"931/#%,P

2to3

Page 170: OSCON 2008: Porting to Python 3.0

043"(31/#)1#.*;

Page 171: OSCON 2008: Porting to Python 3.0

043"(31/#)1#.*;

2to3

Page 172: OSCON 2008: Porting to Python 3.0

%&3$20565%8$%"&0#)(?%2D3

Page 173: OSCON 2008: Porting to Python 3.0

3$"42&(;#":(K0?0X2?2#)"&2(3$2043(;#":(2?2#)"&2Y

$*2("92&(3"7#82(D0)

Page 174: OSCON 2008: Porting to Python 3.0

32$O4%@2?%2D(";(7&52#4)%&'(50$0

&"$(0(8"9)

Page 175: OSCON 2008: Porting to Python 3.0

E2*0?23(03()"7F5(21928$

Page 176: OSCON 2008: Porting to Python 3.0

7%*9691"931/#E

7%*968N91"931/#)1#.0245E,,,,

Page 177: OSCON 2008: Porting to Python 3.0

7&4233()"7F#2(E2%&'(2?%4,,,

Page 178: OSCON 2008: Porting to Python 3.0

%;()"7(&225(0(4%3$(";(@2)36-12#43)6.&2455

Page 179: OSCON 2008: Porting to Python 3.0

:"5%;)%&'(0(5%8$(D*%42(%$2#0$%&'

3$%44(7&52L&25(E2*0?%"7#

Page 180: OSCON 2008: Porting to Python 3.0

32$3

Page 181: OSCON 2008: Porting to Python 3.0

32$(4%$2#043

Page 182: OSCON 2008: Porting to Python 3.0

AD89b89H89UB

Page 183: OSCON 2008: Porting to Python 3.0

5%8$3P(D%$*"7$($*2(8"4"&3

Page 184: OSCON 2008: Porting to Python 3.0

E7$

Page 185: OSCON 2008: Porting to Python 3.0

0:E%'7%$)6

Page 186: OSCON 2008: Porting to Python 3.0

ABV2:9$)(5%8$V2:9$)(32$V

Page 187: OSCON 2008: Porting to Python 3.0

AB(\\(31/#45

2:9$)(32$62.#45

Page 188: OSCON 2008: Porting to Python 3.0

32$(8":9#2*2&3%"&3

Page 189: OSCON 2008: Porting to Python 3.0

%$2#0E423

Page 190: OSCON 2008: Porting to Python 3.0

".I#459⇒9CC".I#CC45

2to3

Page 191: OSCON 2008: Porting to Python 3.0

&2D(;20$7#27&908@%&'6

71*2#89;*.2#89-!2#9M9*.2=-#-12#

Page 192: OSCON 2008: Porting to Python 3.0

$.!389;*.2#9M92%0.-12#

;P="689#!1-9M92%0.-12#

Page 193: OSCON 2008: Porting to Python 3.0

0!(45P971-#.*45P(j1(45

!

%$2#0$"#3

2to3

Page 194: OSCON 2008: Porting to Python 3.0

21829$%"&3

Page 195: OSCON 2008: Porting to Python 3.0

&"(:"#2(3$#%&'(21829$%"&3

Page 196: OSCON 2008: Porting to Python 3.0

21829$%"&3(:73$(52#%?2(;#":(a!2.[I/.(#1%"

Page 197: OSCON 2008: Porting to Python 3.0

<O0#'(*!12.

*!12.9k&[I/89N!-

!

*!12.9k&[I/4N!-5

2to3

Page 198: OSCON 2008: Porting to Python 3.0

+O0#'(#0%326

*!12.9.I/89N!-89#,!/6

(((((((((!*!12.9.I/4N!-=.5):1#$C#*!/.,!/64#,!/65

2to3

Page 199: OSCON 2008: Porting to Python 3.0

2&2).I/CN!-=.(W8'"&2

&"$($*#205(30;2

Page 200: OSCON 2008: Porting to Python 3.0

2&2).I/C1"7%45

Page 201: OSCON 2008: Porting to Python 3.0

.I/.(#9.I/89N!-=.

!

.I/.(#9.I/9!29N!-=.

2to3

Page 202: OSCON 2008: Porting to Python 3.0

8403323

Page 203: OSCON 2008: Porting to Python 3.0

&2D(8403323("&4)"45O3$)42(8403323

Page 204: OSCON 2008: Porting to Python 3.0

&2D(3$)42("&4)"45O3$)42(8403323

Page 205: OSCON 2008: Porting to Python 3.0

84033(528"#0$"#3

99'l.+12#.*.3k=((.#

99/-!229m.*01#45E9

9999999)))))

Page 206: OSCON 2008: Porting to Python 3.0

'3./%*!#%*

/-!229k&n-!22E

9999(!22

((((((((((((!

/-!229k&n-!22E

9999(!22c)`4033(\(528"#0$"#Xc)`4033Y

Page 207: OSCON 2008: Porting to Python 3.0

:2$08403323(@%&50(;7&@)

:2$08403323(%&*2#%$25

Page 208: OSCON 2008: Porting to Python 3.0

"&($*2(37EK28$

/-!229`4a89n890.#!/-!22Mk5E

9999))))

Page 209: OSCON 2008: Porting to Python 3.0

:2$08403323(%&(+,-:"#2(9"D2#;74

:D0*0*0*0*0*0*0

Page 210: OSCON 2008: Porting to Python 3.0

&"$('"%&'(%&$"(52$0%4

!r!(+JJZ

Page 211: OSCON 2008: Porting to Python 3.0

./`3

Page 212: OSCON 2008: Porting to Python 3.0

.E3$#08$(/032(`403323

Page 213: OSCON 2008: Porting to Python 3.0

$*2(9#"E42:

Page 215: OSCON 2008: Porting to Python 3.0

3":2$%:23()"7(80#2

Page 216: OSCON 2008: Porting to Python 3.0

0332#$(%3O0O32I72&82

$!2!##*4%,P)CC/%"#!1"2CC59o

$!2!##*4%,P)CC1#.*CC59o

$!2!##*4%,P)CC+.#1#.0CC59o

Page 217: OSCON 2008: Porting to Python 3.0

7*%09/%--./#1%"2910(%*#9k=#!,-.Z.p=."/.k=#!,-.Z.p=."/.)*.+12#.*4k&k!+1/Z.p=."/.509M9k&k!+1/Z.p=."/.45

q9#$.2.9!*.9,%#$9W*=.E121"2#!"/.4089k=#!,-.Z.p=."/.5122=,/-!224k&k!+1/Z.p=."/.89k=#!,-.Z.p=."/.5

Page 218: OSCON 2008: Porting to Python 3.0

c7$0E42a2I72&82(.E3$#08$(/032(`4033

Page 219: OSCON 2008: Porting to Python 3.0

8"4428$%"&3P(&7:E2#3&7:E2#3(O(!r!(+JbJ

Page 220: OSCON 2008: Porting to Python 3.0

52L&2()"7#("D&6/-!229Wrn$!*!/#.*40.#!/-!22M!,/)`ank.#!5E

9999(!22

/-!229k=((.#E

9999(!22

Wrn$!*!/#.*)*.+12#.*4k=((.#5

Page 221: OSCON 2008: Porting to Python 3.0

0E3$#08$(:2$*"53

/-!229Wrn$!*!/#.*40.#!/-!22M!,/)`ank.#!5E

9999'!,/)!,2#*!/#0.#$%3

99993.79+.#s.*7%*0.*42.-75E

99999999(!22

Page 222: OSCON 2008: Porting to Python 3.0

/-!229k=((.#4Wrn$!*!/#.*5E

9999(!22

>>>909M9k=((.#45

W*!/.,!/6940%2#9*./."#9/!--9-!2#5E

99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>

W&(.[**%*E9n!"T#91"2#!"#1!#.9!,2#*!/#9/-!229

k=((.#9:1#$9!,2#*!/#90.#$%329+.#s.*7%*0.*

Page 223: OSCON 2008: Porting to Python 3.0

>>>9/-!229k&l!#1%"!-4"=0,.*2)l!#1%"!-5E9

)))999(!22

)))9

>>>909M9k&l!#1%"!-45

W*!/.,!/6940%2#9*./."#9/!--9-!2#5E

99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>

W&(.[**%*E9n!"T#91"2#!"#1!#.9!,2#*!/#9/-!229k&l!#1%"!-9:1#$9

!,2#*!/#90.#$%329CC!,2CC89CC!33CC89CC/.1-CC89CC.pCC89

CC7-%%*CC89CC7-%%*31NCC89CC-.CC89CC-#CC89CC0%3CC89CC0=-CC89

CC".+CC89CC(%2CC89CC(%:CC89CC*!33CC89CC*7-%%*31NCC89CC*0%3CC89

CC*0=-CC89CC*%="3CC89CC*(%:CC89CC*#*=.31NCC89CC#*=.31NCC89

CC#*="/CC893."%01"!#%*89"=0.*!#%*

Page 224: OSCON 2008: Porting to Python 3.0

s0E3$#08$9#"92#$)E2*0?23(03()"7F5(21928$

Page 225: OSCON 2008: Porting to Python 3.0

;7&8$%"&3

Page 226: OSCON 2008: Porting to Python 3.0

@2)D"#5("&4)(0#'380&F$(E2(9"3%$%"&04

Page 227: OSCON 2008: Porting to Python 3.0

E7'')(210:9426

3.793%k!+1/4!*+D89!*+b897-!+MX!-2.5E

999))))

3%k!+1/4D8b8H59q97-!+9M9H9ooLo

Page 228: OSCON 2008: Porting to Python 3.0

$*2(8*0&'26@2)D"#5(0#'3(0;$2#(;!*+2

Page 229: OSCON 2008: Porting to Python 3.0

3.793%k!+1/4!*+D89!*+b89;.I#*!2897-!+MX!-2.5E9999179.I#*!2E99999999*!12.9W&(.[**%*4?%%(2@59999))))

Page 230: OSCON 2008: Porting to Python 3.0

3.793%k!+1/4!*+D89!*+b89;897-!+MX!-2.5E9999))))

>>>93%k!+1/4D8b8H5W*!/.,!/6940%2#9*./."#9/!--9-!2#5E99X1-.9RK2#31">R89-1".9D891"9K0%3=-.>W&(.[**%*E93%k!+1/459#!6.29.I!/#-&9b9(%21#1%"!-9!*+=0."#294H9+1N."5

Page 231: OSCON 2008: Porting to Python 3.0

0&&"$0$%"&3

Page 232: OSCON 2008: Porting to Python 3.0

0$$08*%&'(:2$050$0($"(0#'7:2&$3

Page 233: OSCON 2008: Porting to Python 3.0

3)&$0163.797="/4!*+E9.I(*.221%"59h>9*.#=*"r!-=.E

9999(!22

Page 234: OSCON 2008: Porting to Python 3.0

219#233%"&(80&(E2(0&)$*%&'

Page 235: OSCON 2008: Porting to Python 3.0

5"87:2&$0$%"&6

3.793%[N1-4(-!"E9?!9(-!"@59h>9?.N1-9*.2=-#2@E9999))))

Page 236: OSCON 2008: Porting to Python 3.0

$)923

3.79s=0(t!24+!--%"2E97-%!#89

999999999999(*1/.E97-%!#59h>97-%!#E

Page 237: OSCON 2008: Porting to Python 3.0

:"#2(8":9421(3$%446

993.79(*%/.22X1-.24;71-.2E9?%".9%*90%*.971-."!0.2@8

999993.-.#.E9?3.-.#.9:$."93%".@9M9X!-2.59h>9?!9,%%-.!"@E

Page 238: OSCON 2008: Porting to Python 3.0

!)$*"&(%'&"#23(0&&"$0$%"&3

Page 239: OSCON 2008: Porting to Python 3.0

3$"#25(%&(CC!""%#!#1%"2CC

Page 240: OSCON 2008: Porting to Python 3.0

+#5(90#$)($""43

Page 241: OSCON 2008: Porting to Python 3.0

2,',"9$%:%M2#3P(5"83P(BTr3P(

40&'70'2(E#%5'23P($)928*28@%&'P(,,,

Page 242: OSCON 2008: Porting to Python 3.0

7="/%,P)7="/C;

!

2g7="/C4);5gCCuDCCg

2to3

Page 243: OSCON 2008: Porting to Python 3.0

L423

Page 244: OSCON 2008: Porting to Python 3.0

$21$(?3(E%&0#)

Page 245: OSCON 2008: Porting to Python 3.0

$21$(L423(:73$(*0?2(2&8"5%&'9#"57823(7&%8"52

Page 246: OSCON 2008: Porting to Python 3.0

E%&0#)(L423(9#"5782(E)$23$#%&'3

Page 247: OSCON 2008: Porting to Python 3.0

&2D(B>R(40)2#

Page 248: OSCON 2008: Porting to Python 3.0

3$5%"(%3(3$5

Page 249: OSCON 2008: Porting to Python 3.0

E7$(@%&50(,,,&"$('""5

Page 250: OSCON 2008: Porting to Python 3.0

#0D(B>RE7t2#25(B>R

$21$(B>R

Page 251: OSCON 2008: Porting to Python 3.0

./`3

W.I#v^a!2.

a=77.*.3v^a!2.

l!:v^a!2.

Page 252: OSCON 2008: Porting to Python 3.0

2,',(X1-.v^

Z%/6.#v^

a&#.2v^044(%:942:2&$l!:v^a!2.

Page 253: OSCON 2008: Porting to Python 3.0

)"7(9#"E0E4)(5"&F$(&225($"(80#2

21829$(;"#6

Page 254: OSCON 2008: Porting to Python 3.0

>>>9%(."4Tg#0(g7%jj1.T89T:T5

K1%)W.I#v^G*!((.*9%,P./#9!#9QIH/bwxQ>

>>>9%(."4Tg#0(g7%jj1.T89T:,T5

K1%)a=77.*.3G*1#.*9%,P./#9!#9QIH,x/wQ>

>>>9%(."4Tg#0(g7%jj1.T89T*,T5

K1%)a=77.*.3l.!3.*9%,P./#9!#9QIH/bwxQ>

Page 255: OSCON 2008: Porting to Python 3.0

:"57423

Page 256: OSCON 2008: Porting to Python 3.0
Page 257: OSCON 2008: Porting to Python 3.0

0E3"47$2(%:9"#$3

Page 258: OSCON 2008: Porting to Python 3.0

10(%*#97%%04D0)3(%:9"#$3(;#":($*2($"9(

42?24

Page 259: OSCON 2008: Porting to Python 3.0

%:9"#$(;#":(30:2(908@0'26

7*%09)910(%*#97%%

Page 260: OSCON 2008: Porting to Python 3.0

%:9"#$(;#":(90#2&$6

7*%09))910(%*#97%%

Page 261: OSCON 2008: Porting to Python 3.0

<,=

7*%09CC7=#=*.CC9

10(%*#9!,2%-=#.C10(%*#

Page 262: OSCON 2008: Porting to Python 3.0

E7%4$%&3

Page 263: OSCON 2008: Porting to Python 3.0

04#205)(8"?2#256:09P(L4$2#P(M%9P(9#%&$

2to3

Page 264: OSCON 2008: Porting to Python 3.0

&2D(E7%4$%&6(.I./45#29408239.I./93$:$

2to3

Page 265: OSCON 2008: Porting to Python 3.0

/!--!,-.45

K73$(8044(%$

"#(8*28@(;"#(uu8044uu

2to3

Page 266: OSCON 2008: Porting to Python 3.0

,=77.*45

!

0.0%*&N1.:45

2to3

Page 267: OSCON 2008: Porting to Python 3.0

E7t2#XY($2#:%&044)(E#"@2&

Page 268: OSCON 2008: Porting to Python 3.0

3$54%E

Page 269: OSCON 2008: Porting to Python 3.0

'"0436!r!(U(8":94%0&823":2(3$#78$7#2

8420&%&'("7$(8#7;$

Page 270: OSCON 2008: Porting to Python 3.0

!r!(---U

]c"57423(3*"745(*0?2(3*"#$P(044O4"D2#8032(&0:23,^

Page 271: OSCON 2008: Porting to Python 3.0

,,,""93

Page 272: OSCON 2008: Porting to Python 3.0

/032vQQ!a2#?2#8!%8@42

8a$#%&'BRvQcC!0#32#

,,,,

Page 273: OSCON 2008: Porting to Python 3.0

2%$*2#(#2&0:25P("#(

Page 274: OSCON 2008: Porting to Python 3.0
Page 275: OSCON 2008: Porting to Python 3.0

3$#78$7#2

Page 276: OSCON 2008: Porting to Python 3.0

87##2&$(3$#78$7#26

Page 277: OSCON 2008: Porting to Python 3.0
Page 278: OSCON 2008: Porting to Python 3.0

5794%80$%"&3

Page 279: OSCON 2008: Porting to Python 3.0

0&5(&20#(5794%80$%"&

,233,9+3,093,093=0,3,0

Page 280: OSCON 2008: Porting to Python 3.0

7#44%E?3

7#44%E<

Page 281: OSCON 2008: Porting to Python 3.0

8420&%&'($*%3(3$7t(79

Page 282: OSCON 2008: Porting to Python 3.0

&2D(908@0'236

$##(

$#0-

I0-*(/

P2%"

3,0

=*--1,

Page 283: OSCON 2008: Porting to Python 3.0

4"$3(";(#2&0:23

/Z#*1"+v^9⇒91%)Z#*1"+v^

Page 284: OSCON 2008: Porting to Python 3.0

4"$3(";(#2&0:23

Z%/6.#Z.*N.*9⇒92%/6.#2.*N.*

Page 285: OSCON 2008: Porting to Python 3.0

*$$94%E("(*$$9,84%2&$

Page 286: OSCON 2008: Porting to Python 3.0

7#44%E(0&5(7#44%E<(:2#'25&2D(908@0'2

Page 287: OSCON 2008: Porting to Python 3.0

&2D(908@0'26

$##(

Page 288: OSCON 2008: Porting to Python 3.0

$##((8"&$2&$3/-1."#

2.*N.*

/%%61.2

/%%61.P!*

Page 289: OSCON 2008: Porting to Python 3.0

8#7;$

Page 290: OSCON 2008: Porting to Python 3.0

]E0$$2#%23(%&847525^

Page 291: OSCON 2008: Porting to Python 3.0

3":2(";($*2(E0$$2#%23"45(0&5(E73$25

Page 292: OSCON 2008: Porting to Python 3.0
Page 293: OSCON 2008: Porting to Python 3.0

4"$3(";(97#'232,',

"45(2:0%4(:"57423"45(*03*(:"57423

"45(940$;"#:(:"57423

Page 294: OSCON 2008: Porting to Python 3.0

#$*.!3('"&2732(#$*.!31"+

Page 295: OSCON 2008: Porting to Python 3.0

q32#T%8$(0&5(;#%2&53

!

37E84033(;#":(5%8$

Page 296: OSCON 2008: Porting to Python 3.0

<$"+("&4)(80$8*23(3":2(";($*232

Page 297: OSCON 2008: Porting to Python 3.0

D0#&("&(%:9"#$(%&(<,=

Page 298: OSCON 2008: Porting to Python 3.0

9"#$%&'(099#"08*

Page 299: OSCON 2008: Porting to Python 3.0

$0@2(<,Z(8"52'2$(D"#@%&'("&(<,=$7#&("&(O+(w0'D*%42(Q#726(((((#7&($*#"7'*(<$"+(((((#7&(7&%$($23$3(7&52#(+,-(((((L1(<,1(8"52

Page 300: OSCON 2008: Porting to Python 3.0

2?2&$7044),,,5#"9(<,1(?2#3%"&

3D%$8*($"(+,1(?2#3%"&

Page 301: OSCON 2008: Porting to Python 3.0

$*%&'3($*0$(0#2(&"$('""5

Page 302: OSCON 2008: Porting to Python 3.0

;D5(8":90$(";(:"57423

Page 303: OSCON 2008: Porting to Python 3.0

7'4)(L16

1792&2)N.*21%"C1"7%9K94H8Q8Q5E

((((((7*%09$##(-1,910(%*#9\WWsn%""./#1%".-2.E

997*%09$##()/-1."#910(%*#9\WWsn%""./#1%"

Page 304: OSCON 2008: Porting to Python 3.0

9%8@42O8":90$%E%4%$)

Page 305: OSCON 2008: Porting to Python 3.0

+#5(90#$)(9@'3

043"(&225(7950$23

`(.!B(8*0&'25P($""

Page 306: OSCON 2008: Porting to Python 3.0

%;()"7(0#2(0(9@'(07$*"#

942032(5"&F$(E#20@()"7#(.!B(%&(+,-(8":90$(?2#3%"&

Page 307: OSCON 2008: Porting to Python 3.0

$2:9$0$%"&6]3%&82(+,1(%3(E#20@%&'(2?2#)$*%&'(0&)D0)^

Page 308: OSCON 2008: Porting to Python 3.0

)"7#(732#3(D%44(*0$2()"7

Page 309: OSCON 2008: Porting to Python 3.0

5"7E42O79'#052P()7@

Page 310: OSCON 2008: Porting to Python 3.0

$*%&'3(&"$(%&(9)+@

Page 311: OSCON 2008: Porting to Python 3.0

8032(%&32&3%$%?%$)520$*($"(40:E50

%:94%8%$(324;:08#"3

Page 312: OSCON 2008: Porting to Python 3.0

&"$(0(8":942$2(#2D#%$2

Page 313: OSCON 2008: Porting to Python 3.0

&"$(#2D#%$%&'($*2(&2D(xc

Page 314: OSCON 2008: Porting to Python 3.0

"$*2#(%:942:2&$0$%"&3(0#2(5"%&'($*0$

Page 315: OSCON 2008: Porting to Python 3.0

`!)$*"&(%3(#2;2#2&82(%:942:2&$0$%"&

Page 316: OSCON 2008: Porting to Python 3.0

$*2(;7$7#2

Page 317: OSCON 2008: Porting to Python 3.0

+,-(%3($*2("&2(8*0&82'2$($*%&'3(#%'*$

Page 318: OSCON 2008: Porting to Python 3.0
Page 319: OSCON 2008: Porting to Python 3.0

5"&F$(21928$(0(b,-

Page 320: OSCON 2008: Porting to Python 3.0
Page 321: OSCON 2008: Porting to Python 3.0

<,1(&"$('"%&'(0D0)

Page 322: OSCON 2008: Porting to Python 3.0

<,y:"#2(+,1(8":90$

*

Page 323: OSCON 2008: Porting to Python 3.0

<,1,)E7'L1(#2420323

;"#(03(4"&'(03(&22525

Page 324: OSCON 2008: Porting to Python 3.0

)"7#(;7$7#2(940&3

Page 325: OSCON 2008: Porting to Python 3.0

942032($#)(+,-(E2$03

Page 326: OSCON 2008: Porting to Python 3.0

X%$F3(203%2#($"('2$(E7'L123(%&Y

Page 327: OSCON 2008: Porting to Python 3.0

$*%&@(0E"7$(+,-

Page 328: OSCON 2008: Porting to Python 3.0
Page 329: OSCON 2008: Porting to Python 3.0

<,1(%3(&"$('"%&'(0D0)

Page 330: OSCON 2008: Porting to Python 3.0

<,1(%3(&"$('"%&'(0D0)

Page 331: OSCON 2008: Porting to Python 3.0

D%44(8"&$%&72($"(E2(3799"#$25

Page 332: OSCON 2008: Porting to Python 3.0

<,y(%&(<-J-

Page 333: OSCON 2008: Porting to Python 3.0

:0%&$2&0&82(#2420323

E"$*(<,1(0&5(+,1

Page 334: OSCON 2008: Porting to Python 3.0

$*0$F3(%$(;"#(&"D

eW.