Profilo di imbuto

Nome imbuto
Indirizzo email n/a
Messaggi2
  • Re: Lista variabili non dichiarate in script
    Forum >> Principianti
    Per la cronaca, alla fine ho risolto con una cosa del genere (non ricordo se questa è la versione definitiva):
    import ast
    import builtins
    
    def find_undeclared_identifiers(script):
        undeclared_identifiers = []
    
        # Parse the script into an abstract syntax tree (AST)
        try:
            tree = ast.parse(script)
        except SyntaxError as e:
            return [str(e)]
    
        # Define a set of built-in identifiers
        builtins_set = set(dir(builtins))
    
        # Define a visitor class to traverse the AST and collect undeclared identifiers
        class UndeclaredIdentifierVisitor(ast.NodeVisitor):
            def __init__(self):
                self.declared_identifiers = set()
                self.used_identifiers = set()
    
            def visit_Name(self, node):
                if isinstance(node.ctx, ast.Load):
                    if node.id not in self.declared_identifiers and node.id not in builtins_set:
                        self.used_identifiers.add(node.id)
                self.generic_visit(node)
    
            def visit_FunctionDef(self, node):
                self.declared_identifiers.add(node.name)
                self.generic_visit(node)
    
            def visit_ClassDef(self, node):
                self.declared_identifiers.add(node.name)
                self.generic_visit(node)
    
            def visit_Assign(self, node):
                for target in node.targets:
                    if isinstance(target, ast.Name):
                        self.declared_identifiers.add(target.id)
                self.generic_visit(node)
    
        visitor = UndeclaredIdentifierVisitor()
        visitor.visit(tree)
    
        # Filter out declared identifiers from used identifiers to find undeclared ones
        undeclared_identifiers = list(visitor.used_identifiers - visitor.declared_identifiers)
    
        return undeclared_identifiers


  • Lista variabili non dichiarate in script
    Forum >> Principianti
    Buongiorno!
    Sto cercando una sorta di workaround per estrarre delle informazioni da alcuni script che verranno eseguiti da un tool a runtime nel main namespace (usando exec o qualcosa di equivalente).

    Un Syntax check sullo script singolo presenta degli errori dovuti a variabili non dichiarate, che peró a runtime dovrebbero essere disponibili nel namespace (create dal tool), sul quale non ho controllo.

    Esiste un modo (pensavo a moduli tipo inspect o ast) per estrarre una lista di oggetti utilizzati in uno script (variabili, classi, funzioni) ma non dichiarati o importati esplicitamente nello stesso che quindi per forza di cose devono "preesistenti" nel namespace (builtins o estensioni dell 'interprete) per rendere lo script eseguibile.

    # spam.py
    foo = bar + 1
    x = list_undeclared('spam.py')
    # >>> ['bar']



    /OT Da storico utente di forumpython.it è stata una sorpresa vederlo offline, è questo ora l'unico forum rimasto? /OT