我的思绪可能在周五下午感觉到,我无法看到一种方法来对下面的代码进行pytonize:
filepath = None
if 'HALLO' in os.environ:
filepath = os.environ['HALLO']
elif os.path.isfile( os.path.join(os.environ['HOME'], 'host.hallo') ):
filepath = os.path.join(os.environ['HOME'], 'host.hallo')
elif os.path.isfile('/etc/app/host.hallo'):
filepath = '/etc/app/host.hallo'
if filepath:
print 'HALLO found in "%s"' % filepath
## do something
else:
print 'HALLO not found!'
## do something else
有关如何做的任何想法?谢谢!
ps:上面的代码只是一个例子,它可能有语法错误,因为我直接在这里写了。
答案 0 :(得分:10)
这应该可以很好地运作:
paths = [
os.environ.get('HALLO', None),
os.path.join(os.environ['HOME'], 'host.hallo'),
'/etc/app/host.hallo',
]
for path in paths:
if path and os.path.isfile(path):
break
else:
# Handle no path
pass
# Use path here
此外,它还允许您添加更多路径以便轻松检查。
答案 1 :(得分:3)
您正在寻找第一个非零filepath
?使用any()
。您还可以使用列表推导/生成器表达式来分解os.path.isfile
。
filepath = any(filename
for filename
in (os.environ.get('HALLO'),
os.path.join(os.environ['HOME'], 'host.hallo'),
'/etc/app/host.hallo')
if os.path.isfile(filename))
if filepath:
print 'HALLO found in "%s"' % filepath
## do something
else:
print 'HALLO not found!'
## do something else
答案 2 :(得分:0)
home_hallo = os.path.join(os.environ['HOME'], 'host.hallo')
filepath = ( ('HALLO' in os.environ and os.environ['HALLO']) or
(os.path.isfile(home_hallo) and home_hallo) or
(os.path.isfile('/etc/app/host.hallo') and '/etc/app/host.hallo') )
if filepath:
print 'HALLO found in "%s"' % filepath
## do something
else:
print 'HALLO not found!'
## do something else
请参阅Boolean operations上的文档,如果不清楚为何有效,请参阅摘要:
表达式 x和y 首先评估 x ;如果 x 为false,则返回其值;否则,将评估 y 并返回结果值。
表达式 x或y 首先评估x;如果 x 为true,则返回其值;否则,将评估 y 并返回结果值。