簡體   English   中英

什么是Pythonic基於已安裝的模塊編寫條件語句的方法?

[英]What's the Pythonic way to write conditional statements based on installed modules?

來自C ++世界,我習慣於使用像CMake之類的工具在編譯時確定的標志來編寫條件編譯。 我想知道模仿這個功能最恐怖的方式是什么。 例如,這是我目前設置的,具體取決於是否找到模塊:

import imp

try:
    imp.find_module('petsc4py')
    HAVE_PETSC=True
except ImportError:
    HAVE_PETSC=False

然后我可以在我的其余Python代碼中使用HAVE_PETSC 這有效,但我想知道它是否是在Python中使用它的正確方法。

是的,沒關系。 您甚至可以直接發出導入,並使用modulename本身作為標志 - 如:

try:
    import petsc4py
except ImportError
    petsc4py = None

在任何使用之前,只需測試petsc4py本身的真實性。

實際上,檢查它是否存在,然后只是嘗試導入它,由於冗余而感覺是unpythonic,因為兩個動作都會觸發ImportError。 但是檢查有一個HAVE_PETSC變量是可以的 - 它可以在上面的try / except之后使用HAVE_PETSC = bool(petsc4py)

你做這件事的方式或多或少都很好。 實際上,python標准庫使用了一種類似的范例:“嘗試導入一些東西,如果由於某種原因它無效,那么 多個 地方設置一個變量”。 檢查程序中稍后是否設置了布爾值將比每次執行單獨的try / except塊更快。

在你的情況下,這樣做可能會更好:

try:
    import petsc4py
    HAVE_PETSC = True
except ImportError:
    HAVE_PETSC = False

你在范例層面上有什么工作,但在這種情況下沒有真正的理由通過importlib (你可能不應該使用imp ,因為它在最近的python版本中已被棄用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM