Тебе не стоит беспокоиться о переименовании undefined. Если кто-то переименует undefined, у вас будет гораздо больше проблем, чем с несколькими, если проверки не пройдены. Если вы действительно хотите защитить свой код, оберните его в IFFE (немедленно вызванное выражение функции) следующим образом:
(function($, Backbone, _, undefined) {
//undefined is undefined here.
})(jQuery, Backbone, _);
Если вы работаете с глобальными переменными (что уже неправильно) в среде браузера Я бы проверил неопределенность следующим образом:
if(window.neverDefined === undefined) {
//Code works
}
Поскольку глобальные переменные являются частью объекта окна, вы можете просто проверить неопределенность вместо приведения к строке и сравнения строк.
Кроме того, почему ваши переменные не определены? Я видел много кода, где они проверяют существование переменных и выполняют некоторые действия, основанные на этом. Ни разу я не видел, где этот подход был правильным.
Мне удалось решить проблему.
Каким-то образом пользователь и группа, которые использовали apache, не имели доступа к переменным среды. Я решил проблему, изменив пользователя и группу, которые использовал apache, на пользователя, у которого я был уверен, что у него будет доступ к этим переменным.
Странно (и досадно), что так сложно установить эти переменные с помощью Python.
Спасибо всем, кто ответил на мой вопрос!
Вы можете полностью устранить проблему, если вы избавляетесь от необходимости устанавливать переменные среды. Вот примечание о том, как это сделать, установив Oracle Instant Client на свой компьютер.
установка Oracle Instantclient в Linux без установки переменных среды?
Вы можете использовать сценарий оболочки чтобы реализовать CGI, установите переменные среды в сценарии оболочки и вызовите сценарий python из сценария оболочки.
Установка переменных среды изнутри python кажется сложной задачей, особенно когда вы имеете дело с тем, как загружаются библиотеки. ..
You need this:
os.environ['ORACLE_HOME'] = '/oracledb/10.2.0/'
os.environ['LD_LIBRARY_PATH'] = '/oracledb/10.2.0/lib'
instead of using os.putenv()
because os.putenv()
doesn't update os.environ
, which cx_Oracle
is presumably looking at.
Documentation: Miscellaneous operating system interfaces says: "Note: Calling putenv() directly does not change os.environ, so it’s better to modify os.environ."
Ваши операторы не в порядке?
#!/usr/bin/python
import os
os.putenv('ORACLE_HOME', '/oracledb/10.2.0/')
os.putenv('LD_LIBRARY_PATH', '/oracledb/10.2.0/lib')
import cx_Oracle
import defs as df
con = cx_Oracle.Connection(df.DB_USER, df.DB_PASS, df.DB_SID)
print con
Из короткого google о проблеме, возможно, ваша проблема связана с окончанием /
в ORACLE_HOME
.
Попробуйте удалить его (а также воспользоваться предложением Ричи) и посмотрите, работает ли оно.