Python Try/Exception类型的特定错误除外

Python Try/Exception类型的特定错误除外,python,try-catch,Python,Try Catch,我有一个特定的功能,在某些情况下执行以下操作: 引发异常“someError” 并可能在其他情况下提出其他例外情况 我想区别对待函数引发异常、“someError”的情况和函数引发其他异常的情况 例如,我尝试了以下方法,但没有达到预期效果 try: raise Exception, 'someError' except Exception('someError'): print('first case') except: print ('second case') 这将

我有一个特定的功能,在某些情况下执行以下操作:

引发异常“someError”

并可能在其他情况下提出其他例外情况

我想区别对待函数引发异常、“someError”的情况和函数引发其他异常的情况

例如,我尝试了以下方法,但没有达到预期效果

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

这将打印“第二个案例”…

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

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

但是它很粗糙。最好只创建两个单独的异常并分别捕获每个异常。

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

class FooErr(Exception):
    pass

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

有关更多详细信息,请参阅。

通过强制打印特定异常的属性,我能够找到错误号所在的
WindowsError

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

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

当然,真正的解决方案是更改该函数以引发不同且更合适的异常。谢谢,我同意最好为此设置特定的异常类,但我不希望这样做,因为这个功能是“第三方”的,这对我不起作用。如果str(e)=‘someError’,我必须这样做,因为我发现e.message不包含我感兴趣的字符串