3

In python3, when I run

>>> exec("","","")
TypeError: exec() arg 2 must be a dict, not str
>>> exec( "print('Hello')", print("World"), print("!") )
World
!
Hello
>>> type(print("World"))
World
<class 'NoneType'>

I mean in the Python3, the arg2 of exec() expects a dict, but we can still put a print() function which is not a dict. why?

user447586
  • 281
  • 2
  • 11

2 Answers2

7

Simple!

It's acceptable because its value is None (it can accept None or a dict), which is the default value for the argument.

In a example, a call such as:

exec("print('Hello')")

Is the same as:

exec("print('Hello')", None, None)
glglgl
  • 89,107
  • 13
  • 149
  • 217
Fernando Jorge Mota
  • 1,506
  • 1
  • 10
  • 13
3

print returns None, which is a valid argument for an optional parameter.

Asad Saeeduddin
  • 46,193
  • 6
  • 90
  • 139