Python 从类向Main抛出异常
我正在尝试编写一个可以导入的独立类。作为这项工作的一部分,我想在我的类中抛出异常,这些异常可以被捕获并在主环境中处理。是否可以向Main抛出特定的异常以供用户/开发人员处理 使用try:and except:在类和Main中抛出它们自己的异常,这是让类将我无法解决的特定异常传递给Main 另外,是否可以了解如何设置Python类,以便它通知用户使用我的特定类必须捕获哪些异常Python 从类向Main抛出异常,python,Python,我正在尝试编写一个可以导入的独立类。作为这项工作的一部分,我想在我的类中抛出异常,这些异常可以被捕获并在主环境中处理。是否可以向Main抛出特定的异常以供用户/开发人员处理 使用try:and except:在类和Main中抛出它们自己的异常,这是让类将我无法解决的特定异常传递给Main 另外,是否可以了解如何设置Python类,以便它通知用户使用我的特定类必须捕获哪些异常 谢谢。请查看上的python教程部分以及该部分。您可以将自己的异常定义为Exception类的子类,然后在main中捕获它
谢谢。请查看上的python教程部分以及该部分。您可以将自己的异常定义为
Exception
类的子类,然后在main中捕获它们
下面是一个简单的示例,尽管本教程中的示例更好:
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!"
最后,您通常会将文档中可能出现的异常告知模块的客户机。报告说:
函数或方法的docstring应该总结其行为并记录其参数、返回值、副作用、引发的异常
编辑:您还应该查看标准异常类的列表,这些异常类可能适合您进行子类化。请查看上的python教程部分以及该部分。您可以将自己的异常定义为
Exception
类的子类,然后在main中捕获它们
下面是一个简单的示例,尽管本教程中的示例更好:
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!"
最后,您通常会将文档中可能出现的异常告知模块的客户机。报告说:
函数或方法的docstring应该总结其行为并记录其参数、返回值、副作用、引发的异常
编辑:您还应该查看标准异常类的列表,该列表可能适合您进行子类化
我正在尝试编写一个可以导入的独立类。作为这项工作的一部分,我想在我的类中抛出异常,这些异常可以被捕获并在主环境中处理。是否可以向Main抛出特定的异常以供用户/开发人员处理
对。假设您的类存在于另一个模块中,那么您需要确保main还可以导入将抛出的异常的名称
使用try:and except:在类和Main中抛出它们自己的异常,这是让类将我无法解决的特定异常传递给Main
在类的代码中的某个地方:
raise ClassSpecificError('the thingy majigged')
另外,是否可以了解如何设置Python类,以便它通知用户使用我的特定类必须捕获哪些异常
不,您不能在Python中检查异常
我正在尝试编写一个可以导入的独立类。作为这项工作的一部分,我想在我的类中抛出异常,这些异常可以被捕获并在主环境中处理。是否可以向Main抛出特定的异常以供用户/开发人员处理
对。假设您的类存在于另一个模块中,那么您需要确保main还可以导入将抛出的异常的名称
使用try:and except:在类和Main中抛出它们自己的异常,这是让类将我无法解决的特定异常传递给Main
在类的代码中的某个地方:
raise ClassSpecificError('the thingy majigged')
另外,是否可以了解如何设置Python类,以便它通知用户使用我的特定类必须捕获哪些异常
不,您不能在Python中检查异常。对于特定的收件人,不会抛出异常。它们只是被抛出(并被调用堆栈上的第一个调用堆栈用合适的
except
子句捕获)。对于特定的接收者,永远不会抛出异常。它们刚刚被抛出(并被调用堆栈上的第一个调用捕获,带有合适的except
子句)。谢谢Matt。因此,为了确认我的理解,如果我只想使用一个默认的python异常(例如zerodivisionerror)来覆盖一个潜在的divde by zero异常,我只需要在类doco中记录潜在的异常,而不做任何其他事情(不尝试或除外)。除了开发人员将其main作为类调用的一部分外,我还尝试了“@Matt”、“@Matt”和“@mattjoiner”,但似乎没有一个坚持?@user788462:是的。记录可能抛出的异常,或者更好,在类内部处理它们,如果这样做有意义的话。例外情况越少越好。@user788462:是的,他们做了一个蹩脚的改变,所有的评论都会通知你评论的海报。其中一部分是删除海报名称的自动完成。伙计们都疯了,谢谢你,马特。因此,为了确认我的理解,如果我只想使用一个默认的python异常(例如zerodivisionerror)来覆盖一个潜在的divde by zero异常,我只需要在类doco中记录潜在的异常,而不做任何其他事情(不尝试或除外)。除了开发人员将其main作为类调用的一部分外,我还尝试了“@Matt”、“@Matt”和“@mattjoiner”,但似乎没有一个坚持?@user788462:是的。记录可能抛出的异常,或者更好,在类内部处理它们,如果这样做有意义的话。例外情况越少越好。@user788462:是的,他们做了一个蹩脚的改变,所有的评论都会通知你评论的海报。其中一部分是删除海报名称的自动完成。伙计们都快疯了