grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \ ã@sfdZddlmZddlmZddlmZddlmZmZm Z m Z m Z m Z dd„Z Gdd „d ejƒZd S) aª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 é)Úpytree)Útoken)Ú fixer_base)ÚAssignÚAttrÚNameÚis_tupleÚis_listÚsymsccsHxBt|ƒD]6\}}|jtjkr |jdjdkr |||dfVq WdS)NéÚexceptr)Ú enumerateÚtyper Ú except_clauseÚchildrenÚvalue)ZnodesÚiÚn©rú0/usr/lib64/python3.6/lib2to3/fixes/fix_except.pyÚ find_exceptss rc@seZdZdZdZdd„ZdS)Ú FixExceptTa1 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}dd„|dDƒ}dd„|dDƒ}�x*t|ƒD�]\}}t|jƒdkr6|jdd…\}} } | jtdd d �ƒ| jtjk�rDt|j ƒd d �} | j ƒ} d | _ | j| ƒ| j ƒ} |j} x"t | ƒD]\}}t |tjƒrÂPqÂWt| ƒsît| ƒ�rt| t| td ƒƒƒ}n t| | ƒ}x&t| d|…ƒD]}|jd |ƒ�q W|j||ƒq6| j d kr6d | _ q6Wdd„|jdd…Dƒ||}tj|j|ƒS)NcSsg|] }|jƒ‘qSr)Úclone)Ú.0rrrrú 2sz'FixExcept.transform..ÚtailcSsg|] }|jƒ‘qSr)r)rZchrrrr4sZcleanupééÚasú )ÚprefixÚÚargsr cSsg|] }|jƒ‘qSr)r)rÚcrrrr\sé)r rÚlenrÚreplacerrrÚNAMEÚnew_namerr r Ú isinstancerZNoderr rrÚreversedZ insert_child)ÚselfZnodeZresultsr rZ try_cleanuprZe_suiteÚEZcommaÚNZnew_NÚtargetZ suite_stmtsrZstmtZassignZchildrrrrÚ transform/s6      zFixExcept.transformN)Ú__name__Ú __module__Ú __qualname__Z BM_compatibleZPATTERNr/rrrrr$srN)Ú__doc__r!rZpgen2rrZ fixer_utilrrrrr r rZBaseFixrrrrrÚs