将Perl转换为Python:这样做或死亡
我正在把一个我几乎不懂的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块里放多个语句。