Очевидно, это потому, что ваш код работает (хотя я не думаю, что он делает то, что вы намерены делать, вероятно, вы захотите изменить List.head во время List.ins() или что-то в этом роде).
>>> class List(Node):
... def __init__(self):
... self.head = Node(6)
... def ins(self, val):
... exec('b = Node(val)')
... self.head.nex = b
...
>>> x = List()
>>> x.ins('a')
>>> x.head.value
6
>>> x.head.nex.value
'a'
Что касается установки «любой строки» в качестве имени переменной, которая работает слишком
>>> exec ("%s = %s" % (raw_input(),raw_input()))
a
'b'
>>> a
'b'
Но если серьезно, на самом деле, абсолютно не должны когда-либо делать что-либо (вы почти никогда не должны использовать Exec вообще). Это буквально откроет вашу программу до полного захвата. Если вы пытаетесь загрузить файл конфигурации или что-то еще, подумайте об использовании этих строк в качестве словарных ключей вместо имен переменных. «Песочница» - вход.
Я не вижу причин, чтобы это было невозможно. Оператор exec выполняется в текущей области. использование 'b = exec ('Node (val)')' должно работать нормально, но этот пример не показывает никакого добавленного значения для использования 'exec'. Можете ли вы продемонстрировать, какова цель его использования в вашем случае? – MasterAM