Python 如何处理异常处理程序中引发的自定义异常?
如果我运行下面的Python脚本并假设我的文件读取将失败,IOError处理程序将引发一个自定义异常,但我不确定应该如何处理引发的自定义异常。有人能帮忙吗Python 如何处理异常处理程序中引发的自定义异常?,python,polymorphism,Python,Polymorphism,如果我运行下面的Python脚本并假设我的文件读取将失败,IOError处理程序将引发一个自定义异常,但我不确定应该如何处理引发的自定义异常。有人能帮忙吗 class CustomIOError(IOError): def __init__(self, msg): super(CustomIOError, self).__init__() self.error_msg = msg try: # Open file to read with open(fileName
class CustomIOError(IOError):
def __init__(self, msg):
super(CustomIOError, self).__init__()
self.error_msg = msg
try:
# Open file to read
with open(fileName) as f:
for line in f:
print line,
except IOError :
raise CustomIOError('Exception message')
# except CustomIOError :
# sys.exit(0)
另外,如果Python支持多态性,为什么我不能用派生类的异常处理程序直接处理基类的异常呢
try:
raise IOError
except CustomIOError:
pass
这将不起作用,程序执行将在打印堆栈跟踪的一部分后终止
因此,如果捕获IOError,抛出CustomIOError并处理您想要的CustomIOError。您可以在IOError块之外使用try…except块一旦异常被
except
子句捕获,同一块中的任何后续异常都将被忽略,因此您不能这样做:
try:
...
except Something:
raise MyError
except MyError: <-- won't work!
....
对于第二个问题,它以另一种方式工作:
try:
raise CustomIOError
except IOError: <-- works
pass
如果你
raisecustomioerror
你应该除了CustomIOError
@Marcus:我不完全清楚你为什么首先需要这个,你能给我们展示一个更大的图片吗?你的程序做什么,为什么你需要自定义异常等等?我恐怕还没有大的图片。我刚刚开始构建一个库,在某种程度上,我决定使用python(第一次),我之所以尝试,是因为我发现它很有趣。事实上,我还想知道什么时候应该真正使用自定义异常,所以如果您能分享一些关于这方面的建议,那将非常有用。谢谢。@Marcus:添加了一些解释和示例。
try:
raise CustomIOError
except IOError: <-- works
pass
# higher-level code
class UserInterface:
def writeButtonClick:
try:
readAndWrite()
except ReadAndWriteFailure:
showMessage("Problem! Please try again")
# lower-level code
class ReadAndWriteFailure(Exception):
pass
def readAndWrite():
try:
fp = open(someFile)
db = sql.connection()
for line in fp:
db.execute(line)
except IOError:
log it
raise ReadAndWriteFailure()
except SQLError:
log it
raise ReadAndWriteFailure()
etc