
    daf                     |    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 Z G d dej                        Zy	)
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              #      K   t        |       D ]L  \  }}|j                  t        j                  k(  s$|j                  d   j
                  dk(  sA|| |dz      f N y w)N    exceptr   )	enumeratetyper   except_clausechildrenvalue)nodesins      3/root/Python-3.12.4/Lib/lib2to3/fixes/fix_except.pyfind_exceptsr      sX     %  &166T'''zz!}""h.%!*o%&s   /AAAc                       e Zd ZdZdZd Zy)	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           
         | j                   }|d   D cg c]  }|j                          }}|d   D cg c]  }|j                          }}t        |      D ]  \  }}	t        |j                        dk(  s |j                  dd \  }
}}|j                  t        dd             |j                  t        j                  k7  r	t        | j                         d      }|j                         }d|_        |j                  |       |j                         }|	j                  }t        |      D ]!  \  }}t        |t        j                        s! n t!        |      st#        |      r t%        |t'        |t        d	                  }nt%        ||      }t)        |d        D ]  }|	j+                  d
|        |	j+                  ||       v|j                  dk(  sd|_         |j                  d d D cg c]  }|j                          c}|z   |z   }t        j                  |j                  |      S c c}w c c}w c c}w )Ntailcleanup      as )prefix argsr      )r   cloner   lenr   replacer   r   r   NAMEnew_namer"   r   
isinstancer   Noder	   r
   r   r   reversedinsert_child)selfnoderesultsr   r   r   chtry_cleanupr   e_suiteEcommaNnew_Ntargetsuite_stmtsr   stmtassignchildcr   s                         r   	transformzFixExcept.transform/   s   yy#*6?3a	33,3I,>?brxxz??&2;&? $	#"M7=))*a/ - 6 6q ;E1d44566UZZ' =EWWYF$&FMIIe$!KKME #*"2"2K#,[#9 "4%dFKK8!"  {gaj!'UDL0I!J!'!6 "*+bq/!: 7,,Q67((F3XX^  #AHI$	#N (,}}Ra'89!AGGI9KG$N{{499h//W 4?P :s   H:H?:IN)__name__
__module____qualname__BM_compatiblePATTERNr?        r   r   r   $   s    MG.0rF   r   N)__doc__r#   r   pgen2r   r   
fixer_utilr   r   r   r	   r
   r   r   BaseFixr   rE   rF   r   <module>rK      s2   0    D D&90
"" 90rF   