以下のコードは問題を完全に説明していると思います。Test2 関数で x が定義されていないのはなぜですか? Test3 関数がエラーを返さないのはなぜですか?
>>> def Test1():
exec('x=2')
print(str(x))
>>> Test1()
2
>>> def Test2():
global x
exec('x=2')
print(str(x))
>>> Test2()
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
Test2()
File "<pyshell#38>", line 4, in Test2
print(str(x))
NameError: global name 'x' is not defined
>>> def Test3():
global x
x=2
print(str(x))
>>> Test3()
2