2012-10-21 132 views
0

这个问题是在参考:定义自定义异常在Python

The "correct" way to define an exception in Python without PyLint complaining

在干净的代码来看,貌似理想的方式来定义一个例外是这样的:

class MyException(Exception): 
    pass 

但是,如参考问题所述,这会导致运行时警告:

DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 

接受的答案似乎是定义消息的方法:

class MyException(Exception): 
    def __init__(self, message): 
     super(MyException, self).__init__(message) 
     self.message = message 

除了是4个凌乱的线条和代码的可读性线,这个最大的问题是,你必须冗余输入新的名称例外(MyException)两次。

我不经常在Python中使用类,所以请原谅我,如果我在这里的基础,但可能更好的方法来处理这是定义自己的基本例外与非贬值.message方法自Python似乎有使用BaseException的问题? ::

# Do this only once: 
class MyBaseException(Exception): 
    def __init__(self, message): 
     super(MyBaseException, self).__init__(message) 
     self.message = message 

# Whenever you want to define a new exception: 
class NewException(MyBaseException): 
    pass 
+3

是什么问题?我只是看到一个声明。你问是不是? – lukecampbell

+0

我会用简单的2班轮解决方案... –

+1

你的问题不是关于如何定义它(如果你不覆盖默认行为,你不这样做,那么不要重写'__init__'),但显然与你如何使用它,因为当你访问属性时会引发警告。所以修复它。 – poke

回答

1

似乎在代码的某个地方使用MyException.message 您可以将其更改为

try: 
    <some code> 
except MyException as msg: 
    <handle>