从类中向Main抛出异常

时间:2011-11-27 22:54:31

标签: python

我正在尝试编写一个可以导入的独立类。作为其中的一部分,我想在我的类中抛出可以在Main中捕获和处理的异常。是否可以向Main抛出特定的异常以供用户/开发人员处理?

我很合理地使用try:并且除了:在Class和Main中抛出自己的异常,它让Class将一个特定的异常传递给Main,这是我无法解决的。

此外,是否可以设置Python类,以便告知用户他们必须捕获哪些异常来使用我的特定类?

感谢。

2 个答案:

答案 0 :(得分:3)

查看user defined exceptions上的python教程部分以及"Exceptions are Classes Too"部分。您可以将自己的异常定义为Exception类的子类,然后在主体中捕获它们。

这是一个简单的例子,虽然教程中的一个更好:

class MyModuleException(Exception):
    """An exception raised by my module"""

    def __init__(self, message):
        super(MyModuleException, self).__init__(message)

然后在你的主要方法中:

try:
    myModule.doSomethingExceptional()
except MyModuleException as e:
    print "Oh no!"

最后,您通常会通知模块的客户端文档中可能会引发的异常。 conventions for Python docstrings说:

  

函数或方法的docstring应该总结其行为并记录其参数,返回值,副作用,引发的异常......

编辑:您还应该查看the python library reference on exceptions以获取标准异常类的列表,这些类可能适合您进行子类化。

答案 1 :(得分:1)

  

我正在尝试编写一个可以导入的独立类。作为其中的一部分,我想在我的类中抛出可以在Main中捕获和处理的异常。是否可以向Main抛出特定的异常以供用户/开发人员处理?

是。假设您的类存在于另一个模块中,您需要确保main还可以导入将抛出的异常的名称。

  

我很合理地使用try:而且:在Class和Main中抛出自己的异常,它让Class将一个特定的异常传递给Main,这是我无法解决的。

class ClassSpecificError(Exception): pass

该类代码中的某处:

raise ClassSpecificError('the thingy majigged')
  

此外,是否可以设置Python类,以便告知用户他们必须捕获哪些异常来使用我的特定类?

不,你不能在Python中检查异常。