3
\
� @ sf d Z ddlmZ ddlmZ ddlmZ ddlmZmZm Z m
Z
mZmZ dd� Z
G dd � 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�symsc c sH xBt | �D ]6\}}|jtjkr
|jd jdkr
|| |d fV q
W d S )N� �exceptr )� enumerate�typer
�
except_clause�children�value)Znodes�i�n� r �0/usr/lib64/python3.6/lib2to3/fixes/fix_except.py�find_excepts s r c @ s e Zd ZdZdZdd� 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)]) >
c C s� | j }dd� |d D �}dd� |d D �}�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�P q�W t|
�s�t|
��rt|t|td���}n
t||�}x&t|
d |� �D ]}|jd
|� �q W |j||� q6|
jdkr6d |
_q6W dd� |jd d� D �| | }tj|j|�S )Nc S s g | ]}|j � �qS r )�clone)�.0r r r r �