mapping.get()
支持「默認」的說法:
os.environ.get("CDO_TBLPATH", '')
默認是返回None
,但通過指定一個空字符串,即使沒有定義CDO_TBLPATH
您的級聯會工作。
如果.get()
返回None,那麼不能將級聯奇蹟般地返回None
;你可以使用一個自定義的類,在__add__
方法中返回None
,但我不確定它是否非常易讀。
如果您需要跳過任何選項(不串聯)如果沒有定義環境變量,你會更好分裂出來的測試:
table_options = (
(lambda: iTBLFilePath, lambda: iTBLFilePath)
(lambda: os.environ.get("CDO_TBLPATH") and os.environ.get("CDO_INSTANCE_TYPE"),
lambda: os.environ["CDO_TBLPATH"] + os.environ["CDO_INSTANCE_TYPE"] + '.tbl'),
(lambda: os.environ.get("CDO_ROOT") and os.environ.get("CDO_INSTANCE_TYPE"),
lambda: os.environ["CDO_ROOT"] + "/cdo/tbl/" + os.environ["CDO_INSTANCE_TYPE"] + ".tbl"),
(lambda: True, lambda: None),
)
self. _TBLFilePath = next(opt() for tst, opt in table_options if tst())
這定義了一系列的測試,並使用與成功的第一個測試相關的值。
對不起,如果我的問題是有點混亂。我真正想要實現的是第二個操作數(os.environ.get(「CDO_TBLPATH」)+ os.environ.get(「CDO_INSTANCE_TYPE」)+「.tbl」)將返回False/None,以防其中一個env變量未設置 –