将Perl转换为Python:执行此操作或死亡

Jdo*_*dog 8 python perl

我正在将Perl(其中我知之甚少)脚本移动到python.

$path = $ENV{ 'SOME_NAME' } || die " SOME_NAME ENV VARIABLE NOT FOUND\n";
Run Code Online (Sandbox Code Playgroud)

我可以(希望)看到这一行做了什么,要么将变量'path'设置为环境变量'SOME_NAME',要么失败,然后向用户输出错误消息.(附注:任何人都知道如何让搜索引擎搜索像'||'这样的特殊字符?)

我试图以"pythonic"的方式实现它(比请求更容易请求宽恕)使用:

try:
    path = os.environ['SOME_NAME']
except KeyError,e:
    print "SOME_NAME ENVIRONMENT VARIABLE NOT FOUND\n"
    raise e
Run Code Online (Sandbox Code Playgroud)

但这看起来相当麻烦,特别是当我为3个不同的环境变量做这件事时.

任何想法,如果有更好的实施,或者你会说这是"pythonic"的方式吗?

非常感谢

Jac*_*cob 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
Run Code Online (Sandbox Code Playgroud)

您可以将多个语句放入try块中.


Kei*_*ith 6

你所拥有的实际上是非常常见的习语,可以说是首选的模式.或者你只是让正常的异常通过而不打印任何额外的东西.Python本身具有相同的效果.所以,

path = os.environ["SOME_NAME"]
Run Code Online (Sandbox Code Playgroud)

只会自动引发KeyError异常,默认行为是在未捕获的异常上退出.回溯将显示您的位置和位置.

但是,如果可能,您还可以提供默认值.

path = os.environ.get("SOME_NAME", "/default/value")
Run Code Online (Sandbox Code Playgroud)

这不会引发错误,您可以做一些合理的默认操作.