On 2010-12-12 21:30 , Nick Coghlan wrote: > On Mon, Dec 13, 2010 at 11:22 AM, Robert Kern<robert.kern at gmail.com> wrote: >> level = getattr(logging, opt.logLevel) > > While this is the approach I would recommend, it does have a couple of > downsides: > > 1. An upper() call is also needed to allow strings like "info" instead > of "INFO": > 2. If an integer is available, it would be nice to return it > unmodified (or, if we ever get named values in the standard library, > convert it to that) > 3. The asymmetry with "logging.getLevelName" grates a bit > > So it would be far more obvious if there was a "logging.getLevel" > counterpart to "logging.getLevelName" that looked something like: > > def getLevel(level): > try: > return operator.index(level) # Integers and equivalents > except TypeError: > pass > try: > key = level.upper() > except Exception as ex: > raise TypeError("Log level must be an integer or string") from ex > return globals()[key] I don't think that the implementation should use globals(). I wouldn't want logging.getLevel('basic_format') to work. Instead, it should look it up in the known set of levels. >> level = logging._levelNames[opt.logLevel] > > That doesn't work (_levelNames maps from integers to strings, we want > the mapping from strings to integers and it is only the module globals > that provides that). At least in Python 2.6, it maps both ways. But then again, it is an _implementation _detail that should not be relied upon in your programs. I would suggest that there should be two dictionaries as part of the documented API, one mapping numbers to names and one mapping names to numbers. Or functions/methods returning said dictionaries. Having the entire mappings at hand is more useful than having functions that do the translation. They would allow you to auto-generate UIs (e.g. the help text for a --log-level argument or a radio box widget in a GUI). Having separate mappings makes them easier to work with than the 2.6-style _levelNames mapping. -- Robert Kern "I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth." -- Umberto Eco
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4