[IPython-dev] parallel: BaseException.message has been deprecated
Brian Granger
ellisonbg.net at gmail.com
Wed Mar 18 23:24:22 EDT 2009
I will have a look at this tonight. Are you on IRC?
Brian
On Wed, Mar 18, 2009 at 7:52 PM, Ondrej Certik <ondrej at certik.cz> wrote:
> Hi,
>
> if I run this code:
>
> try:
> print mec.execute("get_tests()")
> except:
> t, v, tr = sys.exc_info()
> print t
> print v
> print tr
>
> I keep getting this traceback:
>
> /home/ondrej/lib/lib/python/IPython/kernel/error.py:130:
> DeprecationWarning: BaseException.message has been deprecated as of
> Python 2.6
> s = str(self.message)
> Traceback (most recent call last):
> File "t.py", line 27, in <module>
> print v
> File "/home/ondrej/lib/lib/python/IPython/kernel/error.py", line
> 133, in __str__
> s = s + '\n' + engine_str + str(et.__name__) + ': ' + str(ev)
> AttributeError: 'str' object has no attribute '__name__'
>
>
> So this patch fixes the deprecation warning:
>
> === modified file 'IPython/kernel/error.py'
> --- IPython/kernel/error.py 2008-06-06 19:41:55 +0000
> +++ IPython/kernel/error.py 2009-03-19 02:38:41 +0000
> @@ -107,7 +107,7 @@
> class CompositeError(KernelError):
> def __init__(self, message, elist):
> Exception.__init__(self, *(message, elist))
> - self.message = message
> + self.msg = message
> self.elist = elist
>
> def _get_engine_str(self, ev):
> @@ -127,7 +127,7 @@
> return tb
>
> def __str__(self):
> - s = str(self.message)
> + s = str(self.msg)
> for et, ev, etb in self.elist:
> engine_str = self._get_engine_str(ev)
> s = s + '\n' + engine_str + str(et.__name__) + ': ' + str(ev)
>
>
>
>
> Now I only get this traceback:
>
> import struct, sets, time
> <class 'IPython.kernel.error.CompositeError'>
> Traceback (most recent call last):
> File "t.py", line 27, in <module>
> print v
> File "/home/ondrej/lib/lib/python/IPython/kernel/error.py", line
> 133, in __str__
> s = s + '\n' + engine_str + str(et.__name__) + ': ' + str(ev)
> AttributeError: 'str' object has no attribute '__name__'
>
> a quick debugging shows:
>
> ipdb> p et
> 'exceptions.NameError'
> ipdb> p type(et)
> <type 'str'>
>
> and str doesn't have any .__name__. So a fix could be along these lines:
>
> - s = s + '\n' + engine_str + str(et.__name__) + ': ' + str(ev)
> + s = s + '\n' + engine_str + et + ': ' + str(ev)
>
>
> Now my script above shows the actual error:
>
> one or more exceptions from call to method: execute
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
> [Engine Exception]exceptions.NameError: global name '__IPYTHON__' is not defined
>
>
> So I tried to get the line which goes wrong, by following the docs:
>
> http://ipython.scipy.org/doc/nightly/html/parallel/parallel_multiengine.html#parallel-exceptions
>
> by using .raise_exception()
>
> try:
> print mec.execute("get_tests()")
> except:
> t, v, tr = sys.exc_info()
> print t
> print v
> print tr
> print dir(v)
> v.raise_exception()
>
> but I only got:
>
> Traceback (most recent call last):
> File "t.py", line 30, in <module>
> v.raise_exception()
> File "/home/ondrej/lib/lib/python/IPython/kernel/error.py", line
> 157, in raise_exception
> raise et, ev, etb
> TypeError: exceptions must be classes or instances, not str
>
>
> So I'll try to debug it by some other methods to see what went wrong.
>
> Ondrej
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
More information about the IPython-dev
mailing list