Chris Hare wrote:
okay - but why does the response come back like
No such file or directory
def b
('n', 'e', 't', ' ', 'a', 'l', 'r', 'e', 'a', 'd', 'y', ' ', 'r', 'u', 'n',
'n', 'i', 'n', 'g')
The class Exception saves its arguments in the 'args' instance
attribute, and when it prints the exception it prints those arguments:
>>> e = Exception(1, 2, 3)
>>> print e.args
(1, 2, 3)
>>> print e
(1, 2, 3)
>>> print repr(e)
Exception(1, 2, 3)
NetActiveError inherits from RuntimeError, and ultimately from
Exception.
NetActiveError sets the 'args' attribute to its single string argument,
and when the exception is printed out it thinks it's the arguments:
>>> e.args = "string"
>>> print e
('s', 't', 'r', 'i', 'n', 'g')
>>> print repr(e)
Exception('s', 't', 'r', 'i', 'n', 'g')
The correct way to create your own exceptions is to call the
superclass's __init__ method:
>>> class NetActiveError(RuntimeError):
... def __init__(self, error):
... RuntimeError.__init__(self, error)
...
>>> e = NetActiveError("string")
>>> print e
string
>>> print repr(e)
NetActiveError('string',)
On Aug 5, 2010, at 5:49 PM, Benjamin Kaplan wrote:
What makes you think it has to do with user-defined exceptions?
try :
... raise Exception("hello")
... except Exception as (errno, errText) :
... print "whatever"
...
Traceback (most recent call last):
ValueError: need more than 1 values to unpack
An Exception is an object, not a tuple of number and text.
Raise an instance of the exception, not the class:
raise NetActiveError("net already running")
And then catch the exception object
except NetActiveError as err:
print err.args
On Thu, Aug 5, 2010 at 3:41 PM, Chris Hare <ch...@labr.net> wrote:
I have a block of test code, where I am trying to raise and catch my own user
defined exception
class NetActiveError(RuntimeError):
def __init__(self,error):
self.args = error
def a():
try:
fh = open("me.txt", "r")
except Exception as (errno, errText):
print errText
try:
b()
except NetActiveError as (errono, errText):
print errno, errText
def b():
print "def b"
raise NetActiveError,"net already running"
a()
When I run it though, I get the following error:
chare$ python z
No such file or directory
def b
Traceback (most recent call last):
File "z", line 20, in <module>
a()
File "z", line 12, in a
except NetActiveError as (errono, errText):
ValueError: too many values to unpack
What am I doing wrong here?
--
http://mail.python.org/mailman/listinfo/python-list