@@ -1889,23 +1889,37 @@ export class Parser {
18891889
18901890 let typeExpr : ExpressionNode | undefined ;
18911891 let symbolName : IdentifierToken | undefined ;
1892+ let isAsKeywordAllowed = true ;
1893+
18921894 if ( this . _peekTokenType ( ) !== TokenType . Colon ) {
1893- typeExpr = this . _parseTestExpression ( /* allowAssignmentExpression */ true ) ;
1895+ const listResult = this . _parseExpressionListGeneric ( ( ) =>
1896+ this . _parseTestExpression ( /* allowAssignmentExpression */ true )
1897+ ) ;
1898+ if ( listResult . parseError ) {
1899+ typeExpr = listResult . parseError ;
1900+ } else {
1901+ typeExpr = this . _makeExpressionOrTuple ( listResult , /* enclosedInParens */ false ) ;
1902+
1903+ // Python 3.14 allows more than one exception type to be provided in
1904+ // an except clause.
1905+ if ( listResult . list . length > 1 ) {
1906+ if ( PythonVersion . isLessThan ( this . _getLanguageVersion ( ) , pythonVersion3_14 ) ) {
1907+ this . _addSyntaxError ( LocMessage . exceptRequiresParens ( ) , typeExpr ) ;
1908+ }
1909+
1910+ isAsKeywordAllowed = false ;
1911+ }
1912+ }
18941913
18951914 if ( this . _consumeTokenIfKeyword ( KeywordType . As ) ) {
1915+ if ( ! isAsKeywordAllowed ) {
1916+ this . _addSyntaxError ( LocMessage . exceptWithAsRequiresParens ( ) , typeExpr ) ;
1917+ }
1918+
18961919 symbolName = this . _getTokenIfIdentifier ( ) ;
18971920 if ( ! symbolName ) {
18981921 this . _addSyntaxError ( LocMessage . expectedNameAfterAs ( ) , this . _peekToken ( ) ) ;
18991922 }
1900- } else {
1901- // Handle the python 2.x syntax in a graceful manner.
1902- const peekToken = this . _peekToken ( ) ;
1903- if ( this . _consumeTokenIfType ( TokenType . Comma ) ) {
1904- this . _addSyntaxError ( LocMessage . expectedAsAfterException ( ) , peekToken ) ;
1905-
1906- // Parse the expression expected in python 2.x, but discard it.
1907- this . _parseTestExpression ( /* allowAssignmentExpression */ false ) ;
1908- }
19091923 }
19101924 } else if ( isExceptGroup ) {
19111925 this . _addSyntaxError ( LocMessage . exceptGroupRequiresType ( ) , this . _peekToken ( ) ) ;
0 commit comments