ruff/crates/ruff_python_parser/tests/snapshots/valid_syntax@statement__try.py.snap
Ibraheem Ahmed c9dff5c7d5
[ty] AST garbage collection (#18482)
## Summary

Garbage collect ASTs once we are done checking a given file. Queries
with a cross-file dependency on the AST will reparse the file on demand.
This reduces ty's peak memory usage by ~20-30%.

The primary change of this PR is adding a `node_index` field to every
AST node, that is assigned by the parser. `ParsedModule` can use this to
create a flat index of AST nodes any time the file is parsed (or
reparsed). This allows `AstNodeRef` to simply index into the current
instance of the `ParsedModule`, instead of storing a pointer directly.

The indices are somewhat hackily (using an atomic integer) assigned by
the `parsed_module` query instead of by the parser directly. Assigning
the indices in source-order in the (recursive) parser turns out to be
difficult, and collecting the nodes during semantic indexing is
impossible as `SemanticIndex` does not hold onto a specific
`ParsedModuleRef`, which the pointers in the flat AST are tied to. This
means that we have to do an extra AST traversal to assign and collect
the nodes into a flat index, but the small performance impact (~3% on
cold runs) seems worth it for the memory savings.

Part of https://github.com/astral-sh/ty/issues/214.
2025-06-13 08:40:11 -04:00

1790 lines
112 KiB
Text

---
source: crates/ruff_python_parser/tests/fixtures.rs
input_file: crates/ruff_python_parser/resources/valid/statement/try.py
---
## AST
```
Module(
ModModule {
node_index: AtomicNodeIndex(..),
range: 0..1223,
body: [
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 0..28,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 9..12,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 9..12,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 13..28,
node_index: AtomicNodeIndex(..),
type_: None,
name: None,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 25..28,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 25..28,
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 30..106,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 39..42,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 39..42,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 43..74,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 50..60,
id: Name("Exception1"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 64..65,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 71..74,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 71..74,
},
),
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 75..106,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 82..92,
id: Name("Exception2"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 96..97,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 103..106,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 103..106,
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 108..184,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 117..120,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 117..120,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 121..151,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 128..137,
id: Name("Exception"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 141..142,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 148..151,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 148..151,
},
),
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 152..167,
node_index: AtomicNodeIndex(..),
type_: None,
name: None,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 164..167,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 164..167,
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 181..184,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 181..184,
},
),
},
),
],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 186..228,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 195..198,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 195..198,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 199..214,
node_index: AtomicNodeIndex(..),
type_: None,
name: None,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 211..214,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 211..214,
},
),
},
),
],
},
),
],
orelse: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 225..228,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 225..228,
},
),
},
),
],
finalbody: [],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 230..289,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 239..242,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 239..242,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 243..258,
node_index: AtomicNodeIndex(..),
type_: None,
name: None,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 255..258,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 255..258,
},
),
},
),
],
},
),
],
orelse: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 269..272,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 269..272,
},
),
},
),
],
finalbody: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 286..289,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 286..289,
},
),
},
),
],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 291..320,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 300..303,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 300..303,
},
),
},
),
],
handlers: [],
orelse: [],
finalbody: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 317..320,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 317..320,
},
),
},
),
],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 322..365,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 331..334,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 331..334,
},
),
},
),
],
handlers: [],
orelse: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 345..348,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 345..348,
},
),
},
),
],
finalbody: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 362..365,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 362..365,
},
),
},
),
],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 367..441,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 376..379,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 376..379,
},
),
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 380..409,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 388..394,
id: Name("GroupA"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("eg"),
range: 398..400,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 406..409,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 406..409,
},
),
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 410..441,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 418..432,
id: Name("ExceptionGroup"),
ctx: Load,
},
),
),
name: None,
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 438..441,
value: EllipsisLiteral(
ExprEllipsisLiteral {
node_index: AtomicNodeIndex(..),
range: 438..441,
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: true,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 443..577,
body: [
Raise(
StmtRaise {
node_index: AtomicNodeIndex(..),
range: 452..471,
exc: Some(
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 458..471,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 458..468,
id: Name("ValueError"),
ctx: Load,
},
),
arguments: Arguments {
range: 468..471,
node_index: AtomicNodeIndex(..),
args: [
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 469..470,
value: Int(
1,
),
},
),
],
keywords: [],
},
},
),
),
cause: None,
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 472..525,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 479..488,
id: Name("TypeError"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 492..493,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 499..525,
value: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 499..525,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 499..504,
id: Name("print"),
ctx: Load,
},
),
arguments: Arguments {
range: 504..525,
node_index: AtomicNodeIndex(..),
args: [
FString(
ExprFString {
node_index: AtomicNodeIndex(..),
range: 505..524,
value: FStringValue {
inner: Single(
FString(
FString {
range: 505..524,
node_index: AtomicNodeIndex(..),
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 507..514,
node_index: AtomicNodeIndex(..),
value: "caught ",
},
),
Interpolation(
InterpolatedElement {
range: 514..523,
node_index: AtomicNodeIndex(..),
expression: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 515..522,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 515..519,
id: Name("type"),
ctx: Load,
},
),
arguments: Arguments {
range: 519..522,
node_index: AtomicNodeIndex(..),
args: [
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 520..521,
id: Name("e"),
ctx: Load,
},
),
],
keywords: [],
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: FStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
],
keywords: [],
},
},
),
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 526..577,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 533..540,
id: Name("OSError"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 544..545,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 551..577,
value: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 551..577,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 551..556,
id: Name("print"),
ctx: Load,
},
),
arguments: Arguments {
range: 556..577,
node_index: AtomicNodeIndex(..),
args: [
FString(
ExprFString {
node_index: AtomicNodeIndex(..),
range: 557..576,
value: FStringValue {
inner: Single(
FString(
FString {
range: 557..576,
node_index: AtomicNodeIndex(..),
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 559..566,
node_index: AtomicNodeIndex(..),
value: "caught ",
},
),
Interpolation(
InterpolatedElement {
range: 566..575,
node_index: AtomicNodeIndex(..),
expression: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 567..574,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 567..571,
id: Name("type"),
ctx: Load,
},
),
arguments: Arguments {
range: 571..574,
node_index: AtomicNodeIndex(..),
args: [
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 572..573,
id: Name("e"),
ctx: Load,
},
),
],
keywords: [],
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: FStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
],
keywords: [],
},
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: false,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 579..831,
body: [
Raise(
StmtRaise {
node_index: AtomicNodeIndex(..),
range: 588..669,
exc: Some(
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 594..669,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 594..608,
id: Name("ExceptionGroup"),
ctx: Load,
},
),
arguments: Arguments {
range: 608..669,
node_index: AtomicNodeIndex(..),
args: [
StringLiteral(
ExprStringLiteral {
node_index: AtomicNodeIndex(..),
range: 609..613,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 609..613,
node_index: AtomicNodeIndex(..),
value: "eg",
flags: StringLiteralFlags {
quote_style: Double,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
List(
ExprList {
node_index: AtomicNodeIndex(..),
range: 615..668,
elts: [
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 616..629,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 616..626,
id: Name("ValueError"),
ctx: Load,
},
),
arguments: Arguments {
range: 626..629,
node_index: AtomicNodeIndex(..),
args: [
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 627..628,
value: Int(
1,
),
},
),
],
keywords: [],
},
},
),
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 631..643,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 631..640,
id: Name("TypeError"),
ctx: Load,
},
),
arguments: Arguments {
range: 640..643,
node_index: AtomicNodeIndex(..),
args: [
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 641..642,
value: Int(
2,
),
},
),
],
keywords: [],
},
},
),
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 645..655,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 645..652,
id: Name("OSError"),
ctx: Load,
},
),
arguments: Arguments {
range: 652..655,
node_index: AtomicNodeIndex(..),
args: [
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 653..654,
value: Int(
3,
),
},
),
],
keywords: [],
},
},
),
Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 657..667,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 657..664,
id: Name("OSError"),
ctx: Load,
},
),
arguments: Arguments {
range: 664..667,
node_index: AtomicNodeIndex(..),
args: [
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 665..666,
value: Int(
4,
),
},
),
],
keywords: [],
},
},
),
],
ctx: Load,
},
),
],
keywords: [],
},
},
),
),
cause: None,
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 670..751,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 678..687,
id: Name("TypeError"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 691..692,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 698..751,
value: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 698..751,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 698..703,
id: Name("print"),
ctx: Load,
},
),
arguments: Arguments {
range: 703..751,
node_index: AtomicNodeIndex(..),
args: [
FString(
ExprFString {
node_index: AtomicNodeIndex(..),
range: 704..750,
value: FStringValue {
inner: Single(
FString(
FString {
range: 704..750,
node_index: AtomicNodeIndex(..),
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 706..713,
node_index: AtomicNodeIndex(..),
value: "caught ",
},
),
Interpolation(
InterpolatedElement {
range: 713..722,
node_index: AtomicNodeIndex(..),
expression: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 714..721,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 714..718,
id: Name("type"),
ctx: Load,
},
),
arguments: Arguments {
range: 718..721,
node_index: AtomicNodeIndex(..),
args: [
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 719..720,
id: Name("e"),
ctx: Load,
},
),
],
keywords: [],
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 722..735,
node_index: AtomicNodeIndex(..),
value: " with nested ",
},
),
Interpolation(
InterpolatedElement {
range: 735..749,
node_index: AtomicNodeIndex(..),
expression: Attribute(
ExprAttribute {
node_index: AtomicNodeIndex(..),
range: 736..748,
value: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 736..737,
id: Name("e"),
ctx: Load,
},
),
attr: Identifier {
id: Name("exceptions"),
range: 738..748,
node_index: AtomicNodeIndex(..),
},
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: FStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
],
keywords: [],
},
},
),
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 752..831,
node_index: AtomicNodeIndex(..),
type_: Some(
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 760..767,
id: Name("OSError"),
ctx: Load,
},
),
),
name: Some(
Identifier {
id: Name("e"),
range: 771..772,
node_index: AtomicNodeIndex(..),
},
),
body: [
Expr(
StmtExpr {
node_index: AtomicNodeIndex(..),
range: 778..831,
value: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 778..831,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 778..783,
id: Name("print"),
ctx: Load,
},
),
arguments: Arguments {
range: 783..831,
node_index: AtomicNodeIndex(..),
args: [
FString(
ExprFString {
node_index: AtomicNodeIndex(..),
range: 784..830,
value: FStringValue {
inner: Single(
FString(
FString {
range: 784..830,
node_index: AtomicNodeIndex(..),
elements: [
Literal(
InterpolatedStringLiteralElement {
range: 786..793,
node_index: AtomicNodeIndex(..),
value: "caught ",
},
),
Interpolation(
InterpolatedElement {
range: 793..802,
node_index: AtomicNodeIndex(..),
expression: Call(
ExprCall {
node_index: AtomicNodeIndex(..),
range: 794..801,
func: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 794..798,
id: Name("type"),
ctx: Load,
},
),
arguments: Arguments {
range: 798..801,
node_index: AtomicNodeIndex(..),
args: [
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 799..800,
id: Name("e"),
ctx: Load,
},
),
],
keywords: [],
},
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
Literal(
InterpolatedStringLiteralElement {
range: 802..815,
node_index: AtomicNodeIndex(..),
value: " with nested ",
},
),
Interpolation(
InterpolatedElement {
range: 815..829,
node_index: AtomicNodeIndex(..),
expression: Attribute(
ExprAttribute {
node_index: AtomicNodeIndex(..),
range: 816..828,
value: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 816..817,
id: Name("e"),
ctx: Load,
},
),
attr: Identifier {
id: Name("exceptions"),
range: 818..828,
node_index: AtomicNodeIndex(..),
},
ctx: Load,
},
),
debug_text: None,
conversion: None,
format_spec: None,
},
),
],
flags: FStringFlags {
quote_style: Double,
prefix: Regular,
triple_quoted: false,
},
},
),
),
},
},
),
],
keywords: [],
},
},
),
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: true,
},
),
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 833..1075,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 842..846,
},
),
],
handlers: [
ExceptHandler(
ExceptHandlerExceptHandler {
range: 847..875,
node_index: AtomicNodeIndex(..),
type_: Some(
StringLiteral(
ExprStringLiteral {
node_index: AtomicNodeIndex(..),
range: 854..865,
value: StringLiteralValue {
inner: Single(
StringLiteral {
range: 854..865,
node_index: AtomicNodeIndex(..),
value: "exception",
flags: StringLiteralFlags {
quote_style: Double,
prefix: Empty,
triple_quoted: false,
},
},
),
},
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 871..875,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 876..894,
node_index: AtomicNodeIndex(..),
type_: Some(
NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 883..884,
value: Int(
1,
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 890..894,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 895..916,
node_index: AtomicNodeIndex(..),
type_: Some(
BooleanLiteral(
ExprBooleanLiteral {
node_index: AtomicNodeIndex(..),
range: 902..906,
value: true,
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 912..916,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 917..939,
node_index: AtomicNodeIndex(..),
type_: Some(
BinOp(
ExprBinOp {
node_index: AtomicNodeIndex(..),
range: 924..929,
left: NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 924..925,
value: Int(
1,
),
},
),
op: Add,
right: NumberLiteral(
ExprNumberLiteral {
node_index: AtomicNodeIndex(..),
range: 928..929,
value: Int(
1,
),
},
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 935..939,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 940..962,
node_index: AtomicNodeIndex(..),
type_: Some(
BinOp(
ExprBinOp {
node_index: AtomicNodeIndex(..),
range: 947..952,
left: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 947..948,
id: Name("a"),
ctx: Load,
},
),
op: BitOr,
right: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 951..952,
id: Name("b"),
ctx: Load,
},
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 958..962,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 963..987,
node_index: AtomicNodeIndex(..),
type_: Some(
BoolOp(
ExprBoolOp {
node_index: AtomicNodeIndex(..),
range: 970..977,
op: And,
values: [
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 970..971,
id: Name("x"),
ctx: Load,
},
),
Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 976..977,
id: Name("y"),
ctx: Load,
},
),
],
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 983..987,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 988..1012,
node_index: AtomicNodeIndex(..),
type_: Some(
Await(
ExprAwait {
node_index: AtomicNodeIndex(..),
range: 995..1002,
value: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 1001..1002,
id: Name("x"),
ctx: Load,
},
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1008..1012,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 1013..1041,
node_index: AtomicNodeIndex(..),
type_: Some(
Lambda(
ExprLambda {
node_index: AtomicNodeIndex(..),
range: 1020..1031,
parameters: Some(
Parameters {
range: 1027..1028,
node_index: AtomicNodeIndex(
0,
),
posonlyargs: [],
args: [
ParameterWithDefault {
range: 1027..1028,
node_index: AtomicNodeIndex(..),
parameter: Parameter {
range: 1027..1028,
node_index: AtomicNodeIndex(..),
name: Identifier {
id: Name("x"),
range: 1027..1028,
node_index: AtomicNodeIndex(..),
},
annotation: None,
},
default: None,
},
],
vararg: None,
kwonlyargs: [],
kwarg: None,
},
),
body: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 1030..1031,
id: Name("x"),
ctx: Load,
},
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1037..1041,
},
),
],
},
),
ExceptHandler(
ExceptHandlerExceptHandler {
range: 1042..1075,
node_index: AtomicNodeIndex(..),
type_: Some(
If(
ExprIf {
node_index: AtomicNodeIndex(..),
range: 1049..1065,
test: BooleanLiteral(
ExprBooleanLiteral {
node_index: AtomicNodeIndex(..),
range: 1054..1058,
value: true,
},
),
body: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 1049..1050,
id: Name("x"),
ctx: Load,
},
),
orelse: Name(
ExprName {
node_index: AtomicNodeIndex(..),
range: 1064..1065,
id: Name("y"),
ctx: Load,
},
),
},
),
),
name: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1071..1075,
},
),
],
},
),
],
orelse: [],
finalbody: [],
is_star: false,
},
),
If(
StmtIf {
node_index: AtomicNodeIndex(..),
range: 1077..1222,
test: BooleanLiteral(
ExprBooleanLiteral {
node_index: AtomicNodeIndex(..),
range: 1080..1084,
value: true,
},
),
body: [
Try(
StmtTry {
node_index: AtomicNodeIndex(..),
range: 1090..1133,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1103..1107,
},
),
],
handlers: [],
orelse: [],
finalbody: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1129..1133,
},
),
],
is_star: false,
},
),
],
elif_else_clauses: [
ElifElseClause {
range: 1208..1222,
node_index: AtomicNodeIndex(..),
test: None,
body: [
Pass(
StmtPass {
node_index: AtomicNodeIndex(..),
range: 1218..1222,
},
),
],
},
],
},
),
],
},
)
```