尝试/除了Exception类型的特定错误

时间:2011-08-31 21:32:20

标签: python try-catch

我有某种功能在某些情况下会做以下事情:

引发异常,'someError'

并且可能在其他情况下引发其他例外。

我想以不同的方式处理函数引发Exception,'someError'以及函数引发其他异常的情况。

例如,我尝试了以下操作,但它没有按预期工作。

try:
    raise Exception, 'someError'
except Exception('someError'):
    print('first case')
except:
    print ('second case')

这会打印'第二种情况'......

3 个答案:

答案 0 :(得分:10)

您可以查看异常的消息属性

>>> try:
...     raise Exception, 'someError'
... except Exception as e:
...     if e.message == 'someError':
...             print 'first case'
...     else:
...             print 'second case'
... 
first case

但它非常hacky。最好只创建两个单独的异常并单独捕获每个异常。

答案 1 :(得分:3)

您必须定义自己的异常类:

class FooErr(Exception):
    pass

try:
    raise FooErr("bar occured")
except FooErr:
    print("don't care about foo")
except:
    print("don't care about anything.")

有关详细信息,请参阅http://docs.python.org/tutorial/errors.html#user-defined-exceptions

答案 2 :(得分:0)

通过强制打印特定异常的属性,我能够找到错误号所在的import os try: os.mkdir('name') # folder already created, will error except WindowsError as e: if e.winerror == 183: print 'This is the "Cannot create a file when that file already exists" error' else: print "This is an error I don't know about' raise ,至少是table Blob { name : string; size : ulong; data : [ubyte]; }

def BlobStart(builder): builder.StartObject(3)
def BlobAddName(builder, name): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(name), 0)
def BlobAddSize(builder, size): builder.PrependUint64Slot(1, size, 0)
def BlobAddData(builder, data): builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(data), 0)
def BlobStartDataVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def BlobEnd(builder): return builder.EndObject()

我猜其他异常也有类似的属性