将Perl转换为Python:这样做或死亡

9 投票
2 回答
1618 浏览
提问于 2025-04-16 23:28

我正在把一个我几乎不懂的Perl脚本转到Python。

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

我大概能明白这一行的作用,就是把变量'path'设置为环境变量'SOME_NAME',如果找不到这个环境变量,就给用户打印一个错误信息。(顺便问一下,有人知道怎么用搜索引擎搜索像'||'这样的特殊字符吗?)

我试着用一种“Python风格”的方式来实现它(就是“事后求饶比事前请求许可更简单”),用的是:

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

但是这样做起来感觉有点麻烦,尤其是因为我需要处理三个不同的环境变量。

有没有更好的实现方法,或者你觉得这样做就是“Python风格”的做法呢?

非常感谢!

2 个回答

6

你看到的其实是一个很常见的写法,可以说是比较推荐的方式。或者你也可以选择让普通的异常直接通过,不打印额外的内容。Python本身就有这样的效果。所以,

path = os.environ["SOME_NAME"]

这段代码会自动引发一个KeyError异常,默认情况下,如果没有处理这个异常,程序会直接退出。错误追踪信息会告诉你出错的地方和原因。

不过,你也可以提供一个默认值,如果这样做是可行的。

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

这样就不会引发错误,你可以做一些合理的默认处理。

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块里放多个语句。

撰写回答