[Python-Dev] Re: PEP 282 comments

Trent Mick trentm@ActiveState.com
2002年3月20日 18:08:17 -0800


[Mark Hammond wrote]
> [Trent]
>> > How about this (just an idea):
> > def info(self, msgOrException, *args):
> > if isinstance(msgOrException, Exception):
> > # format the exception and
> > msg, args = args[0], args[1:]
> > else:
> > # treat it like before
> >
> > try:
> > # ...
> > except Exception, ex:
> > log.info(ex, "Eeeeek!")
>> I don't like this. I think it rare you will want to log an exception with
> no contextual message.

But you still *can* log contextual information. What I meant and should have
shown is:
 def info(self, firstarg, *args):
 if isinstance(firstarg, Exception):
 exc = firstarg
 msg, args = args[0], args[1:]
 else:
 exc = None
 msg, args = firstarg, args
 # ... (if exc is not None then format the exception and append to
 # msg%args
 try:
 # ...
 except Exception, ex:
 log.info(ex, "Eeeeek! %s %s %s", var1, var2, var3)
basically this log() implementation is just trying to do:
 def log(self, exception, msg, *args):
 #...
 def log(self, msg, *args):
 #...
...in a language that does not support method overloading.
Kinda klugdy? Maybe, though I would rather have:
 def exception(self, msg, *args, *kwargs):
 if not kwargs.has_key("level"):
 level = logging.ERROR
 else:
 level = kwargs["level"]
 #...
than:
 def debugException(...)
 def infoException(...)
 def warnException(...)
 def errorException(...)
 def fatalException(...)
 def logException(...)
[Guido on logging an exception at a level other than ERROR]
> If this use case is rare enough, maybe a better approach would be to
> let you format it yourself using the traceback module?

then just have:
 def exception(self, msg, *args):
 #...
 
Startin' to sound good to me.
Trent
-- 
Trent Mick
TrentM@ActiveState.com

AltStyle によって変換されたページ (->オリジナル) /