[IronPython] catching WebException from OpenReadAsync

Benjamin West bewest at gmail.com
Wed Jun 27 18:59:27 PDT 2007


Ha.  Thanks.

-Ben

On 6/27/07, John Messerly <jomes at microsoft.com> wrote:
> The "stream = args.Result" line in asyncReader is the culprit. The Result property will throw if the read operation failed. You could move that line inside the try block, so the exception is caught. Or alternatively, use the args.Exception property to determine if there was an error in the read.
>
> - John
>
> -----Original Message-----
> From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Benjamin West
> Sent: Wednesday, June 27, 2007 5:22 PM
> To: Discussion of IronPython
> Subject: [IronPython] catching WebException from OpenReadAsync
>
> Is this a bug or am I doing something wrong?
>
> $ cat webclient.py
> import clr
> import System
> from System import Uri
> from System.Net import WebClient, WebException
>
>
> class Foo:
>         def __init__(self, uri):
>                 self.setup(uri)
>
>         def setup(self, uri):
>                 self.uri = Uri(uri)
>                 self.wc = WebClient()
>                 self.wc.OpenReadCompleted += self.asyncReader
>                 try:
>                         self.wc.OpenReadAsync(self.uri)
>                         print "fetching.... please wait."
>                 except (Exception, WebException), e: print "got
> exception: %s" % e
>
>         def asyncReader(self, sender, args):
>                 stream = args.Result
>                 try:
>                         print str(stream)
>                         print "Success."
>                 except (Exception, WebException), e: print "got
> exception: %s" % e
>
>
> $ ipy
> IronPython 1.1 (1.1) on .NET 2.0.50727.42
> Copyright (c) Microsoft Corporation. All rights reserved.
> >>> from webclient import *
> >>> f = Foo('http://www.google.com/bad/url')
> fetching.... please wait.
> >>> Unhandled exception:
> Traceback (most recent call last):
>   File System, line unknown, in OpenReadAsyncCallback
>   File System, line unknown, in GetWebResponse
>   File System, line unknown, in EndGetResponse
>   File mscorlib, line unknown, in PerformWaitCallback
>   File mscorlib, line unknown, in Run
>   File mscorlib, line unknown, in WaitCallback_Context
>   File System, line unknown, in OpenReadOperationCompleted
>   File System, line unknown, in OnOpenReadCompleted
>   File System, line unknown, in Invoke
>   File , line 0, in System.Void(Object, OpenReadCompletedEventArgs)##73
>   File c:\Program Files\Internet Explorer\webclient.py, line 21, in asyncReader
>   File , line 0, in get_Result##76
>   File System, line unknown, in get_Result
>   File System, line unknown, in RaiseExceptionIfNecessary
> StandardError: An exception occurred during the operation, making the
> result invalid.  Check InnerException for exception details.
>
> Unhandled Exception: System.Reflection.TargetInvocationException: An
> exception occurred during the operation, making the result invalid.
> Check InnerException for exception details. --->
> System.Net.WebException: The remote server returned an error: (404)
> Not Found.
>    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
>    at System.Net.WebClient.GetWebResponse(WebRequest request,
> IAsyncResult result)
>    at System.Net.WebClient.OpenReadAsyncCallback(IAsyncResult result)
>    --- End of inner exception stack trace ---
>    at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
>    at System.Net.OpenReadCompletedEventArgs.get_Result()
>    at get_Result##76(Object )
>    at IronPython.Runtime.Calls.CallTarget1.Invoke(Object arg0)
>    at IronPython.Runtime.Calls.FastCallable1.CallInstance(ICallerContext
> context, Object arg0)
>    at IronPython.Runtime.Calls.FastCallable1.CallInstance(ICallerContext
> context, Object instance, Object[] args)
>    at IronPython.Runtime.Types.ReflectedGetterSetter.CallGetter(Object
> instance, Object[] args)
>    at IronPython.Runtime.Types.ReflectedProperty.GetAttribute(Object
> instance, Object context)
>    at IronPython.Runtime.Operations.Ops.GetDescriptor(Object o, Object
> instance, Object context)
>    at IronPython.Runtime.Types.DynamicType.UncheckedGetDescriptor(Object
> o, Object instance, Object context)
>    at IronPython.Runtime.Types.DynamicType.TryBaseGetAttr(ICallerContext
> context, Object self, SymbolId name, Object& ret)
>    at IronPython.Runtime.Types.ReflectedType.TryGetAttr(ICallerContext
> context, Object self, SymbolId name, Object& ret)
>    at IronPython.Runtime.Types.DynamicType.GetAttr(ICallerContext
> context, Object self, SymbolId name)
>    at IronPython.Runtime.Operations.Ops.GetAttr(ICallerContext
> context, Object o, SymbolId name)
>    at webclient.asyncReader$f146(FunctionEnvironment8Dictionary $env,
> Object self, Object sender, Object args) in c:\Program Files\Internet
> Explorer\webclient.py:line 21
>    at IronPython.Runtime.Calls.Function3.Call(ICallerContext context,
> Object arg0, Object arg1, Object arg2)
>    at IronPython.Runtime.Calls.Function3.Call(ICallerContext context,
> Object[] args)
>    at IronPython.Runtime.Calls.PythonFunction.CallInstance(ICallerContext
> context, Object instance, Object[] args)
>    at IronPython.Runtime.Calls.Method.Call(ICallerContext context,
> Object[] args)
>    at IronPython.Runtime.Operations.Ops.Call(Object func, Object[] args)
>    at IronPython.Runtime.Types.ReflectedEvent.EventDispatcher.Call(Object[]
> args)
>    at IronPython.Runtime.Operations.Ops.Call(Object func, Object[] args)
>    at IronPython.Runtime.Operations.Ops.Call(Object func, Object arg0,
> Object arg1)
>    at System.Void(Object, OpenReadCompletedEventArgs)##73(Object ,
> Object , OpenReadCompletedEventArgs )
>    at System.Net.OpenReadCompletedEventHandler.Invoke(Object sender,
> OpenReadCompletedEventArgs e)
>    at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
>    at System.Net.WebClient.OpenReadOperationCompleted(Object arg)
>    at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object
> state)
>    at System.Threading.ExecutionContext.Run(ExecutionContext
> executionContext, ContextCallback callback, Object state)
>    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> _______________________________________________
> users mailing list
> users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>


More information about the users mailing list