Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

python
communitycreator

What is ast.While(test, body, orelse) in Python?

Abdul Monum
Abstract Syntax Tree

ast.While is a class defined in the ast module that expresses the while loop in Python in the form of an Abstract Syntax Tree.

When the parse() method of ast is called on a Python source code that contains a while loop, the ast.While class is invoked, which expresses the try statement to a node in an ast tree data structure. The ast.While class represents the While node type in the ast tree.

Class parameters

  • test: Contains the condition of the loop, such as a Compare node.
  • body: List of nodes in the body of a while loop.
  • orelse: List of nodes in the body of else nodes.

Example

import ast
from pprint import pprint

class WhileVisitor(ast.NodeVisitor):

    def visit_While(self, node):
      print('Node type: While\nFields:', node._fields)
      ast.NodeVisitor.generic_visit(self, node)

    def visit_Compare(self, node):
        print('Node type: Compare\nFields:', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Name(self, node):
        print('Node type: Name\nFields:', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

    def visit_Pass(self, node):
        print('Node type: Pass\nFields:', node._fields)
        ast.NodeVisitor.generic_visit(self, node)

visitor = WhileVisitor()
tree = ast.parse("""
while (a < 10):
  pass
else:
  ...
""")
pprint(ast.dump(tree))
visitor.visit(tree)

Explanation

  • We define a WhileVisitor class that extends from the parent class ast.NodeVisitor. We override the predefined visit_While, visit_Compare, visit_Name, and visit_Pass methods in the parent class, which receive the While, Compare, Name, and Pass nodes, respectively.
  • In the method, we print the type and the fields inside the node and call the generic_visit() method, which invokes the propagation of visit on the children nodes of the input node.
  • We initialize a visitor object of the class WhileVisitor.
  • We write Python code that contains a try and except block. We pass the code to the ast.parse() method, which returns the result of the expression after evaluation, and store the result in tree.
  • The ast.dump() method returns a formatted string of the tree structure in a tree.
  • The visit method available to the visitor object visits all the nodes in the tree structure.

RELATED TAGS

python
communitycreator
RELATED COURSES

View all Courses

Keep Exploring