""" Some surprising ways to test the running Python version ... Tested in the latest from the each minor series 3.9.21 through 3.15a7 on linux. ```sh $ for python in 3.9 3.10 3.11 3.12 3.13 3.14 3.15; do uv run --python $python pyver.py; done your guessed python version is 3.9, actual is 3.9.21 your guessed python version is 3.10, actual is 3.10.16 your guessed python version is 3.11, actual is 3.11.10 your guessed python version is 3.12, actual is 3.12.8 your guessed python version is 3.13, actual is 3.13.12 your guessed python version is 3.14, actual is 3.14.2 your guessed python version is 3.15, actual is 3.15.0a7 ``` """ import sys import datetime from math import log import fractions class C(datetime.date): i = 0 def __init__(self, *_): super().__init__() type(self).i += 1 def try_call(f, *args, **kw): try: f(*args, **kw) return True except Exception: return False class BigConstant: def __index__(self): return 10**1000 def __float__(self): raise OverflowError # t1: version is >= 3.10 t1 = frozenset() is not frozenset() # t2: version is >= 3.11 t2 = len(fractions.Fraction().__reduce__()[1]) == 2 # t3: version is >= 3.12 (this doesn't test what I intended but so what!) t3 = len((lambda: ~True).__code__.co_code) != 6 and t2 # t4: version is >= 3.13 C.i = 0 C(1, 2, 3).replace(month=9) t4 = C.i > 1 # t5: version is >= 3.14 t5a = try_call(datetime.time.fromisoformat, "12:33:44,55") t5b = try_call(datetime.time.fromisoformat, "12,55") t5 = t5a and not t5b # t6: version is >= 3.15 t6 = try_call(log, BigConstant()) ver = sys.version.split()[0] # print(f"{ver:8} {t1:<1} {t2:<1} {t3:<1} {t4:<1} {t5:<1} {t6:<1}") print( f"your guessed python version is 3.{sum((9, t1, t2, t3, t4, t5, t6))}, actual is {ver}" )