This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Error when debugging logging.FileHandler subclass __init__ method
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.11, Python 3.10, Python 3.9, Python 3.8
process
Status: closed Resolution: duplicate
Dependencies: Superseder: pdb "args" crashes when an arg is not printable
View: 20853
Assigned To: Nosy List: andrei.avk, fcodvpt, kj
Priority: normal Keywords:

Created on 2020-10-22 16:37 by fcodvpt, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
multiprocesses-to-files-with-dict.py fcodvpt, 2020-10-22 16:37 Code with the FileHandler subclass
Messages (3)
msg379313 - (view) Author: Françoise CONIL (fcodvpt) Date: 2020-10-22 16:37
In pdb, when I hit "a" to see __init__ parameters of a logging.FileHandler subclass, I get an error because __repr__ needs a logging level. The level has been removed from the parameters by configure_handler() when it instanciates the handler. The level is set after the handler instanciation.

I do not know if it can be changed or if I missed something.

Traceback (most recent call last):
  File "/usr/lib/python3.8/logging/config.py", line 563, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/lib/python3.8/logging/config.py", line 744, in configure_handler
    result = factory(**kwargs)
  File "/home/fconil/Progs/python/logging/multiprocesses-to-files-with-dict.py", line 53, in __init__
    pfilename = f"{filename}-{os.getpid()}.log"
  File "/home/fconil/Progs/python/logging/multiprocesses-to-files-with-dict.py", line 53, in __init__
    pfilename = f"{filename}-{os.getpid()}.log"
  File "/usr/lib/python3.8/bdb.py", line 88, in trace_dispatch
    return self.dispatch_line(frame)
  File "/usr/lib/python3.8/bdb.py", line 112, in dispatch_line
    self.user_line(frame)
  File "/usr/lib/python3.8/pdb.py", line 262, in user_line
    self.interaction(frame, None)
  File "/usr/lib/python3.8/pdb.py", line 357, in interaction
    self._cmdloop()
  File "/usr/lib/python3.8/pdb.py", line 322, in _cmdloop
    self.cmdloop()
  File "/usr/lib/python3.8/cmd.py", line 138, in cmdloop
    stop = self.onecmd(line)
  File "/usr/lib/python3.8/pdb.py", line 423, in onecmd
    return cmd.Cmd.onecmd(self, line)
  File "/usr/lib/python3.8/cmd.py", line 217, in onecmd
    return func(arg)
  File "/usr/lib/python3.8/pdb.py", line 1146, in do_args
    self.message('%s = %r' % (name, dict[name]))
  File "/usr/lib/python3.8/logging/__init__.py", line 1186, in __repr__
    level = getLevelName(self.level)
AttributeError: 'MultiFileHandler' object has no attribute 'level'
msg398452 - (view) Author: Andrei Kulakov (andrei.avk) * (Python triager) Date: 2021-07-29 02:27
Françoise:

You can simply set the two attrs required by __repr__ in the pdb session:

./python.exe ~/temp/a.py                                                                    --INS--
> /Users/ak/opensource/cpython/Lib/logging/__init__.py(1152)__init__()
-> filename = os.fspath(filename)
(Pdb) self.level=1
(Pdb) self.baseFilename='test.log'
(Pdb) a
self = <FileHandler test.log (Level 1)>
filename = 'test.log'
mode = 'a'
encoding = None
delay = False
errors = None
(Pdb)

I think this can be closed as it's not a bug and there's a workaround as shown above.
msg401668 - (view) Author: Andrei Kulakov (andrei.avk) * (Python triager) Date: 2021-09-12 15:06
Changing from not a bug to duplicate of #20853.
History
Date User Action Args
2022-04-11 14:59:37adminsetgithub: 86285
2021-09-12 15:06:19andrei.avksetsuperseder: pdb "args" crashes when an arg is not printable
resolution: not a bug -> duplicate
messages: + msg401668
2021-09-10 15:05:22andrei.avksetstatus: open -> closed
nosy: + kj

resolution: not a bug
stage: resolved
2021-07-29 02:27:14andrei.avksetnosy: + andrei.avk

messages: + msg398452
versions: + Python 3.9, Python 3.10, Python 3.11
2020-10-22 16:37:47fcodvptcreate