2011-08-12 6 views
8

私はPerl(そのほとんどは知識がほとんどない)スクリプトをPythonに移動しています。PerlをPythonに翻訳する:これを行うか死ぬ

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

私は(うまくいけば)この行が何を見、どちらかの環境変数「SOME_NAME」や、ユーザーにエラーメッセージを印刷することができないの変数「パス」を設定することができます。 (サイドノート:検索エンジンに '||'のような特殊文字を検索させる方法は誰でも知っていますか?)

私はこれを "pythonic :

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

しかし、私は3つの異なる環境変数に対してこれをやっているので、これはやや面倒なようです。

より良い実装がある場合、またはこれはそれについて行くための "pythonic"方法と言うでしょうか?

多くのおかげ

+0

Googleの質問については、[Googleヘルプ](http://www.google.com/support/websearch/bin/static.py?hl=ja&page=guide.cs&guide=1221265&answer=134479&rd=1): '一般的に@#$%^&*()= + [] \やその他の特殊文字を含む句読点は無視されます。 – Jacob

+0

それは検索エンジンがあるかどうか疑問に思っていますそれらを無視していない、特にこのようなものを検索するときに便利です! – Jdog

+0

@Jdogあなたがキャラクターの名前をgoogleにすると意味のあるものを得ることができるかもしれません。 expampleが '||'を検索するためには、 "perl vertical bars"をタイプします。何かがあれば、文字や記号に関する[wikipedia pages](http://en.wikipedia.org/wiki/Pipe_character)には、多くのプログラミング言語で使われているものが一覧表示されます。 – MattLBeck

答えて

11
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ブロックの中に複数の文を入れることができます。

+0

ええ、私は、私はユーザーが不足していることを伝えることができるように分離する必要があると思っていたが、それはもちろん例外のトレースバックに含まれます..乾杯! – Jdog

6

実際にはかなり一般的なイディオムであり、間違いなく好ましいパターンです。または、何も印刷せずに通常の例外を通過させるだけです。 Pythonはネイティブに同じ効果を持ちます。従って、

path = os.environ["SOME_NAME"] 

KeyError例外はすべて単独で発生し、デフォルトの動作ではキャッチされていない例外を終了します。トレースバックは何をどこに表示します。

ただし、可能な場合は、デフォルト値を指定することもできます。

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

これはエラーを発生させず、デフォルトのアクションとして賢明なことをする可能性があります。

関連する問題