如果對象依賴於未包含在Python中的模塊(如win32api,gstreamer,gui工具包等),並且該模塊中的類/函數/方法可能會失敗,那麼該對象應該做什麼?Python:如何處理無法正確初始化的類的方法調用?
下面是一個例子:
import guimodule # Just an example; could be anything
class RandomWindow(object):
def __init__(self):
try:
self.dialog = guimodule.Dialog() # I might fail
except: guimodule.DialogError:
self.dialog = None # This can't be right
def update(self):
self.dialog.prepare()
self.dialog.paint()
self.dialog.update()
# ~30 more methods
這個類僅是一個更大的程序的一個微小的(和不必要的,但有用的)部分。
假設我們有一個名爲guimodule
的假想模塊,其類名爲Dialog
,可能無法實例化。如果我們的RandomWindow
類有說,操縱這個窗口的30個方法,檢查if self.dialog is not None
將是一個痛苦,並且將在使用常用方法(例如上面的示例中的update
方法)中執行時減慢程序速度。在NoneType
上調用.paint()
(當Dialog
加載失敗時)將引發錯誤,並且使用所有原始方法和屬性製作虛擬類將是荒謬的。
如何修改我的班級以處理Dialog
班級的失敗創建?
爲什麼這會比內部處理錯誤更好/更簡單? –
@DK,直接知道對象不能被使用,而不是在每次使用對象時都會失敗,這很簡單。 –