gpt4 book ai didi

python - 如何从包 __init__ 引发自定义异常?

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:58 25 4
gpt4 key购买 nike

我有一个看起来像这样的包 __init__.py:

import sys

__required_python_version = (2,6, 0)

if sys.version_info < __required_python_version:
this_version = '.'.join([str(x) for x in sys.version_info[0:3]])
required_version = '.'.join([str(x) for x in __required_python_version])
raise PythonVersionError(this_version, required_version)

class PythonVersionError(Exception):
def __init__(self, this_version, required_version):
self.this_version = this_version
self.required_version = required_version

def __str__(self):
return 'Python version %s is invalid. Must be at least %s' % (self.this_ver, self.required_ver)

虽然我确信有一种更优雅的方式来格式化这些版本字符串,并且我可能可以通过使用标准异常来获得,但我真正的问题是我将如何做这样的事情?最好的方法是将我的自定义异常移动到一个单独的文件中并导入它吗?或者我应该将版本检查包装在 __init__ 运行时执行的函数中吗?我只是在寻找有关首选方法的建议。

谢谢

最佳答案

因为看起来您不会有任何用户出现该异常 --除非这个模块将被您作为更大系统的一部分实现的其他模块使用,否则我说您在这里不需要自定义异常。

除了给出的错误信息外,它几乎没有什么用处。任何试图导入你的模块的模块都必须知道它,以捕获异常,或者只是让程序停止并进行回溯。由于意识到这一点,它需要导入您的模块,无论如何它都会崩溃到回溯——然后用户可以在哪里读取错误消息。

对于阅读错误消息的人来说,一个简单的“异常”说明它是不正确的 PythonVersin 与任何自定义异常一样好。

在技术方面,Python 需要在引发它之前了解 PythonVersionError:在尝试引发它之前,您需要将该代码放入 if block 中。

最后,如果您正在构建一个更大的系统,并且系统的其他部分可能会 try catch PythonVersionError,那么正确的做法是将其放入它自己的文件/模块,以便它可以用于将引发它的模块,以及导入它的任何其他模块。

关于python - 如何从包 __init__ 引发自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5234233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com