Перевести Perl на Python: сделай это или умри - PullRequest
8 голосов
/ 12 августа 2011

Я перемещаю сценарий Perl (о котором у меня очень мало знаний) в python.

$path = $ENV{ 'SOME_NAME' } || die " SOME_NAME ENV VARIABLE NOT FOUND\n";

Я могу (надеюсь) увидеть, что делает эта строка, либо установить переменную path впеременная окружения 'SOME_NAME' или ошибка, после которой выдается сообщение об ошибке пользователю.(Примечание: кто-нибудь знает, как заставить поисковую систему искать специальные символы, такие как «||»?)

Я пытался реализовать ее «питоническим» способом (Проще просить прощения, чем разрешения) используя:

try:
    path = os.environ['SOME_NAME']
except KeyError,e:
    print "SOME_NAME ENVIRONMENT VARIABLE NOT FOUND\n"
    raise e

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

Любые идеи, если есть лучшая реализация или вы бы сказали этотакое "питонический" способ сделать это?

Большое спасибо

Ответы [ 2 ]

11 голосов
/ 12 августа 2011
try:
    path = os.environ['SOME_NAME']
    var2 = os.environ['VAR2']
    var3 = os.environ['VAR3']
    var4 = os.environ['VAR4']
except KeyError,e:
    print "Not found: ", e

Вы можете поместить более одного оператора в блок try.

6 голосов
/ 12 августа 2011

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

path = os.environ["SOME_NAME"]

Просто вызовет исключение KeyError само по себе, и поведение по умолчанию - выход из необработанных исключений. Обратный путь покажет вам, что и где.

Однако вы также можете указать значение по умолчанию, если это возможно.

path = os.environ.get("SOME_NAME", "/default/value")

Это не вызовет ошибки, и вы можете сделать что-то разумное в качестве действия по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...