我正在尝试编写一个可以导入的独立类。作为其中的一部分,我想在我的类中抛出可以在Main中捕获和处理的异常。是否可以向Main抛出特定的异常以供用户/开发人员处理?
我很合理地使用try:并且除了:在Class和Main中抛出自己的异常,它让Class将一个特定的异常传递给Main,这是我无法解决的。
此外,是否可以设置Python类,以便告知用户他们必须捕获哪些异常来使用我的特定类?
感谢。
答案 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中检查异常。