Строка:
exec builtins_code in builtins.__dict__
просто добавляет _
в интерактивную среду, чтобы она повторяла последнюю оцененную переменную. Без этой строки _
не определено. Обратите внимание, что эта функция не очень полезна в сценарии и может быть удалена. Это, похоже, не связано с вашей проблемой.
Похоже, что интерес IronPython заключается в том, чтобы иметь возможность легко взаимодействовать с Microsoft / C #, но он остается «стабильным» в версии 2.7 и, вероятно, не так без ошибок, как официальные версии python (похожая ошибка была встречается и не решается на Reddit , не то чтобы это помогло, но вы знаете, что вы не единственный ...).
У него есть , чтобы быть ошибкой, потому что вы не можете удалить встроенное, если оно не переопределено:
>>> str
>>> del str
Traceback (most recent call last):
File "", line 1, in
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 являются явными и могут быть перехвачены с хорошим отслеживанием.
Если Вы пишете это для современных дистрибутивов, можно использовать xdg-open
:
$ xdg-open http://google.com/
Если Вы находитесь на более старой версии, необходимо будет использовать определенную для рабочего стола команду как gnome-open
или exo-open
.
xdg-открытый новый стандарт, и необходимо использовать его, если это возможно. Однако, если дистрибутив является больше, чем несколько лет, он не может существовать, и альтернативные механизмы включают $BROWSER (более старый предпринятый стандарт), открытый для гнома (Gnome), kfmclient должностное лицо (KDE), экзооткрывают (Xfce), или анализирующий mailcap самостоятельно (обработчик текстов/HTML будет вероятен быть браузером).
Однако большинство приложений не беспокоится так большой работой - если они создаются для конкретной среды, они используют механизмы запуска той среды. Например, Gnome имеет gnome_url_show, KDE имеет KRun, большинство терминальных программ (например, дурак) анализирует mailcap и т.д. Жесткое кодирование браузер и разрешение дистрибьютора или пользователя для переопределения значения по умолчанию распространено также.
Я не предлагаю жесткое кодирование это, но если Вы действительно хотите открыть новую вкладку в Firefox, можно использовать "Firefox - $URL новой вкладки".
Если Вы не хотите включать дополнительные приложения, просто используйте встроенные дистанционные команды Firefox. Например:
firefox -remote 'openurl(http://stackoverflow.com)'
Se детализировал использование по http://www.mozilla.org/unix/remote.html
Примечание для xdg-открытого: проверьте http://portland.freedesktop.org/wiki/, раздел "Using Xdg-utils"; это указывает, что можно включать xdg-открытый сценарий в собственное приложение и использование, что как нейтрализация в случае, если целевая система не имеет xdg-открытым уже установленный.