builtin_compile.py 905 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # test compile builtin
  2. def have_compile():
  3. try:
  4. compile
  5. return True
  6. except NameError:
  7. return False
  8. def test():
  9. global x
  10. c = compile("print(x)", "file", "exec")
  11. try:
  12. exec(c)
  13. except NameError:
  14. print("NameError")
  15. # global variable for compiled code to access
  16. x = 1
  17. exec(c)
  18. exec(c, {"x":2})
  19. exec(c, {}, {"x":3})
  20. # single/eval mode
  21. exec(compile('print(1 + 1)', 'file', 'single'))
  22. print(eval(compile('1 + 1', 'file', 'eval')))
  23. # bad mode
  24. try:
  25. compile('1', 'file', '')
  26. except ValueError:
  27. print("ValueError")
  28. # exception within compiled code
  29. try:
  30. exec(compile('noexist', 'file', 'exec'))
  31. except NameError:
  32. print("NameError")
  33. print(x) # check 'x' still exists as a global
  34. if have_compile():
  35. test()
  36. else:
  37. print("SKIP")
  38. raise SystemExit