2016-08-19 47 views
0

以前可能有人問過我,或者我可能過於迂腐,但是我自己的搜索已經空了。如果模塊不是正確的版本,應拋出哪個異常?

通過Python 2.x exceptions page看,我不知道哪一個我應該raise如果我的腳本確定一個已經導入的模塊的__version__,例如cv2,不是正確的版本。例如,我正在處理的腳本需要OpenCV版本3;如果確定版本!= 3,那麼raise在以下塊中的最佳例外是什麼?

import cv2 
if not cv2.__version__.startswith('3'): 
    raise ValueError('OpenCV _3_ required') 

回答

2

如果現有的不足,您可以創建自己的自定義異常。

class VersionError(Exception): 
    def __init__(self, msg): 
     Exception.__init__(self,msg) 
+0

啊,是的,我意識到我可以加我自己的,我只是對那些已經可用的好奇。但是,這也有效! – bjd2385

+1

這對我來說有點矯枉過正。另外,你可以通過_not_來提供一個'__init__'來簡化它。 'class VersionError(Exception):pass'會工作得很好(或者,如果你真的想多走一步,你可以添加一個docstring而不是'pass') – mgilson

+0

是的。但是由於OP已經通過了他們自己的定製消息,我覺得我應該用'msg'參數添加'__init__'調用。 – dunder

2

你已經得到了很多這取決於你想要與此異常做什麼選項...一般情況下,我期望的安裝腳本來處理,所以我可能想建立依賴關係的適當版本這是一個簡單的運行時斷言 - 因此AssertionError可能是適當的。

這是一個非常好的 - 你並不需要一個if聲明,只是一個assert

assert cv2.__version__.startswith('3'), 'OpenCV _3_ required' 

我的下一個賭注是使用RuntimeError作爲被真正的意思是一般異常發生在運行時(通常不會被捕獲)......這是一個相當普遍的「哦,快照,發生了一些我們無法恢復的壞事,讓我們吐出一個錯誤讓用戶知道發生了什麼。

+0

謝謝!這是關於我在找什麼 – bjd2385

相關問題