IronPython.Runtime.UnboundNameException: имя 'str' не определено

Нужно ли вызывать компоненты componentWillReceiveProps после обновления реквизита

componentWillReceiveProps(nextProps){
 this.loadPosts(nextProps)**HERE YOU CAN GET UPDATED PROPS**
},

при обновлении данных в это время, вы можете получить доступ к этим данным в nextprops

3
задан ekolis 25 January 2019 в 10:06
поделиться

1 ответ

Строка:

exec builtins_code in builtins.__dict__

просто добавляет _ в интерактивную среду, чтобы она повторяла последнюю оцененную переменную. Без этой строки _ не определено. Обратите внимание, что эта функция не очень полезна в сценарии и может быть удалена. Это, похоже, не связано с вашей проблемой.

Похоже, что интерес IronPython заключается в том, чтобы иметь возможность легко взаимодействовать с Microsoft / C #, но он остается «стабильным» в версии 2.7 и, вероятно, не так без ошибок, как официальные версии python (похожая ошибка была встречается и не решается на Reddit , не то чтобы это помогло, но вы знаете, что вы не единственный ...).

У него есть , чтобы быть ошибкой, потому что вы не можете удалить встроенное, если оно не переопределено:

>>> 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 в строке формата (позиционной):

[114 ]

или по ключевому слову:

'Mines {Amount1} minerals each turn (modified by planet value).'.format(Amount1=Amount1)

Этот метод не включает встроенную функцию str. Не говоря о том, что у вас не возникнет других проблем, но даже когда доступно str, это один из предпочтительных способов форматирования строки.

Найдите выход, избегая таких ошибок. К счастью, исключения Python являются явными и могут быть перехвачены с хорошим отслеживанием.

0
ответ дан Jean-François Fabre 25 January 2019 в 10:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: