Yf
@ s d Z d d l m Z d d l m Z d d l m Z d d l m Z m Z m Z m
Z
m Z m Z d d Z
Gd d d e j Z d
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)AssignAttrNameis_tupleis_listsymsc c s\ xU t | D]G \ } } | j t j k r
| j d j d k r
| | | d f Vq
Wd S)N exceptr ) enumeratetyper
except_clausechildrenvalue)Znodesin r =/opt/alt/python35/lib64/python3.5/lib2to3/fixes/fix_except.pyfind_excepts s r c @ s( e Z d Z d Z d Z d d Z d S) 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)]) >
c C s | j } d d | d D } d d | d D } xt | D]\ } } t | j d k rD | j d d \ } } }
| j t d d d
|
j t j k rt | j d d
} |
j
} d | _ |
j | | j
} | j }
x- t |
D] \ } } t
| t j rPqWt |
sCt |
rdt | t | t d } n t | | } x. t |
d | D] } | j d
| qW| j | | qD |
j d k rD d
|
_ qD Wd d | j d d D | | } t j | j | S)Nc S s g | ] } | j q Sr )clone).0r r r r
<listcomp>2 s z'FixExcept.transform.<locals>.<listcomp>tailc S s g | ] } | j q Sr )r )r Zchr r r r 4 s Zcleanup asprefix argsr c S s g | ] } | j q Sr )r )r cr r r r \ s )r
r lenr replacer r r NAMEnew_namer r r
isinstancer ZNoder r r r reversedZinsert_child)selfZnodeZresultsr
r Ztry_cleanupr Ze_suiteEZcommaNZnew_NtargetZsuite_stmtsr ZstmtZassignZchildr r r r transform/ s6
!
(zFixExcept.transformN)__name__
__module____qualname__Z
BM_compatibleZPATTERNr/ r r r r r $ s r N)__doc__r! r Zpgen2r r Z
fixer_utilr r r r r r
r ZBaseFixr r r r r <module> s .