Python 如果模块的版本不正确,我应该引发哪个异常?

Python 如果模块的版本不正确,我应该引发哪个异常?,python,exception,version,Python,Exception,Version,这可能是以前问过的,也可能是我太迂腐了,但我自己的搜索结果是空的 通过查看,如果我的脚本确定导入的模块的\uu版本(例如cv2)不是正确的版本,我不确定应该提出哪个版本。例如,我正在编写的脚本需要OpenCV版本3;如果确定版本!=三个 import cv2 if not cv2.__version__.startswith('3'): raise ValueError('OpenCV _3_ required') 如果现有的异常不够,您可以创建自己的自定义异常 class Versi

这可能是以前问过的,也可能是我太迂腐了,但我自己的搜索结果是空的

通过查看,如果我的脚本确定导入的模块的
\uu版本(例如
cv2
)不是正确的版本,我不确定应该提出哪个版本。例如,我正在编写的脚本需要OpenCV版本3;如果确定版本!=三个

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

如果现有的异常不够,您可以创建自己的自定义异常

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

如果现有的异常不够,您可以创建自己的自定义异常

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

你有很多选择,这取决于你想如何处理这个例外。。。通常,我希望安装脚本能够处理设置适当版本的依赖项,因此我可以将其视为一个简单的运行时断言——因此,
AssertionError
可能是合适的

这一条非常好——您不需要
if
语句,只需要
断言

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

我的下一个赌注是使用
RuntimeError
,因为这实际上是在运行时发生的一般异常(通常不会被捕获)。。。这是一个相当普遍的“哦,突然,发生了一些我们无法恢复的糟糕事情。让我们只吐出一个错误,让用户知道发生了什么”。

您有很多选择,这取决于您希望如何处理此异常。。。通常,我希望安装脚本能够处理设置适当版本的依赖项,因此我可以将其视为一个简单的运行时断言——因此,
AssertionError
可能是合适的

这一条非常好——您不需要
if
语句,只需要
断言

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

我的下一个赌注是使用
RuntimeError
,因为这实际上是在运行时发生的一般异常(通常不会被捕获)。。。这是一个相当普遍的“哦,突然,发生了一些我们无法恢复的糟糕事情。让我们说出一个错误,让用户知道发生了什么”。

谢谢!这就是我一直在找的汉克斯!这就是我想要的是的,我意识到我可以添加我自己的,我只是好奇那些已经可用的。但这也行!这对我来说太过分了。此外,您可以通过不提供
\uuuuu init\uuuu
来简化此过程<代码>类VersionError(例外):pass
可以很好地工作(或者,如果你真的想多做一点,你可以添加一个docstring isntead
pass
)是的,也可以。但是由于OP已经传递了他们自己的自定义消息,我觉得我应该添加带有
msg
参数的
\uuuu init\uuu
调用。但这也行!这对我来说太过分了。此外,您可以通过不提供
\uuuuu init\uuuu
来简化此过程<代码>类VersionError(例外):pass可以很好地工作(或者,如果你真的想多做一点,你可以添加一个docstring isntead
pass
)是的,也可以。但是由于OP已经传递了他们自己的自定义消息,我觉得应该添加带有
msg
参数的
\uuuu init\uuuu
调用。