diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 48a44d3..70e1142 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -13,11 +13,11 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.9] + python-version: [3.9, 3.14] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Display Python version diff --git a/hyperpyyaml/core.py b/hyperpyyaml/core.py index caef5f9..6900792 100644 --- a/hyperpyyaml/core.py +++ b/hyperpyyaml/core.py @@ -8,6 +8,7 @@ import re import ast +import sys import yaml import copy import pydoc @@ -715,9 +716,18 @@ def _ast_eval(node): ast.Pow: op.pow, ast.Mod: op.mod, } - if isinstance(node, ast.Num): # - return node.n - elif isinstance(node, ast.BinOp): # + + # Compatibility check for Python versions + # In Python 3.8, ast.Num was deprecated and replaced by ast.Constant. + if sys.version_info >= (3, 8): + if isinstance(node, ast.Constant): # , , , + return node.value + else: + # For Python versions older than 3.8 + if isinstance(node, ast.Num): # + return node.n + + if isinstance(node, ast.BinOp): # return ops[type(node.op)](_ast_eval(node.left), _ast_eval(node.right)) elif isinstance(node, ast.UnaryOp): # e.g., -1 return ops[type(node.op)](_ast_eval(node.operand))