Строка:
exec builtins_code in builtins.__dict__
просто добавляет _
в интерактивную среду, чтобы она повторяла последнюю оцененную переменную.Без этой строки _
не определено.Обратите внимание, что эта функция не очень полезна в сценарии и может быть удалена.Похоже, это не связано с вашей проблемой.
Похоже, единственный интерес IronPython - возможность легко взаимодействовать с Microsoft / C #, но он остается "стабильным" в версии 2.7 и, вероятно, не такбесплатные как официальные версии python (похожая ошибка встречалась и не была решена на reddit , не то чтобы это помогло, но вы знаете, что вы не единственный ...).
It имеет , чтобы быть ошибкой, потому что вы не можете удалить встроенное, когда оно не переопределено:
>>> str
<type 'str'>
>>> del str
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'str' is not defined
Теперь давайте будем прагматичны: никто не собирается исправлятьэта ошибка в ближайшем будущем.
Таким образом, вы можете попытаться «восстановить» имя str
, выполнив:
str = __builtins__.get('str')
Я не проверял это, может быть, он не собираетсяработать либо, когда вы находитесь в этом странном состоянии, но есть и другие обходные пути, чтобы получить «потерянные» имена классов, используя экземпляр и атрибут __class__
:
>>> "".__class__(34) # "".__class__ is str
'34'
>>> 0 .__class__(1.4) # note the space to help the parser :)
1
Единственная проблема заключается в том, чтобудет выглядеть странно в вашем коде.Не забывайте комментировать!
В любом случае, вам не нужно str
для этого, вы можете обойти вашу проблему, используя str.format
в строке формата (позиционной):
'Mines {} minerals each turn (modified by planet value).'.format(Amount1)
или по ключевому слову:
'Mines {Amount1} minerals each turn (modified by planet value).'.format(Amount1=Amount1)
Этот метод не включает str
встроенный.Не говоря уже о том, что у вас не возникнет других проблем, но даже когда доступно str
, это один из предпочтительных способов форматирования строки.
Избегайте подобных ошибок.К счастью, исключения Python являются явными и могут быть перехвачены с хорошим отслеживанием.