ó u®¸Qc@sŠdZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z d„Z dejfd„ƒYZd S( sªFixer for except statements with named exceptions. The following cases will be converted: - "except E, T:" where T is a name: except E as T: - "except E, T:" where T is not a name, tuple or list: except E as t: T = t This is done because the target of an "except" clause must be a name. - "except E, T:" where T is a tuple or list literal: except E as t: T = t.args i(tpytree(ttoken(t fixer_base(tAssigntAttrtNametis_tupletis_listtsymsccsbx[t|ƒD]M\}}|jtjkr |jdjdkrZ|||dfVqZq q WdS(Niuexcepti(t enumeratettypeRt except_clausetchildrentvalue(tnodestitn((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyt find_exceptsst FixExceptcBseZeZdZd„ZRS(s1 try_stmt< 'try' ':' (simple_stmt | suite) cleanup=(except_clause ':' (simple_stmt | suite))+ tail=(['except' ':' (simple_stmt | suite)] ['else' ':' (simple_stmt | suite)] ['finally' ':' (simple_stmt | suite)]) > cCs,|j}g|dD]}|jƒ^q}g|dD]}|jƒ^q7}x™t|ƒD]‹\}} t|jƒdkr\|jdd!\} } } | jtdddƒƒ| jtj krÉt|j ƒddƒ} | jƒ}d|_ | j| ƒ| jƒ} | j}x0t |ƒD]"\}}t |tjƒrPqqWt| ƒs[t| ƒr|t|t| td ƒƒƒ}nt|| ƒ}x(t|| ƒD]}| jd |ƒqœW| j||ƒqç| j dkrçd| _ qçq\q\Wg|jd D]}|jƒ^qù||}tj|j|ƒS( Nttailtcleanupiiuastprefixu uuargsii(RtcloneRtlenR treplaceRR RtNAMEtnew_nameRR t isinstanceRtNodeRRRRtreversedt insert_child(tselftnodetresultsRRRtcht try_cleanupR te_suitetEtcommatNtnew_Nttargett suite_stmtsRtstmttassigntchildtcR ((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyt transform/s6 ##     !.(t__name__t __module__tTruet BM_compatibletPATTERNR/(((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyR$sN(t__doc__tRtpgen2RRt fixer_utilRRRRRRRtBaseFixR(((s./sys/lib/python2.7/lib2to3/fixes/fix_except.pyts .