[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Debug script under pdb, how to avoid a bunch of errors caused by the exit()?


I tried the following tests under pdb,

1. WinPython 3.6.6 on Vista, still saw those errors.
2. Python 3.4 on Win7, still saw those errors.
3. Python 3.6.3 on Win7, it's fine, no errors.

Hmmm... seems both Python and OS are related?

--Jach

Peter via Python-list at 2018/9/7 AM 06:33 wrote:
> I'm on 3.7.0 on Win 10, and get a different result. No traceback. 
> Perhaps it's a bug in 3.4 that was fixed subsequently.
> 
> C:\test> py -m pdb bugInPDB.py
>  > c:\test\buginpdb.py(1)<module>()
> -> password = 'bad'
> (Pdb) tbreak 3
> Breakpoint 1 at c:\test\buginpdb.py:3
> (Pdb) cont
> Deleted breakpoint 1 at c:\test\buginpdb.py:3
>  > c:\test\buginpdb.py(3)<module>()
> -> print('bad password')
> (Pdb) cont
> bad password
> The program exited via sys.exit(). Exit status: None
>  > c:\test\buginpdb.py(1)<module>()
> -> password = 'bad'
> (Pdb) q
> 
> C:\test>
> 
> On 6/09/2018 7:38 PM, Jach Fong wrote:
>> Here the script file, test0.py:
>> --------------------------
>> password = 'bad'
>> if password == 'bad':
>> ??? print('bad password')
>> ??? exit()
>> else:
>> ??? print('good password')
>>
>> print('something else to do')
>> --------------------
>>
>> ??? When running it under Python3.4 Windows Vista, no problem at all.
>>
>> D:\Works\Python>py test0.py
>> bad password
>>
>> ??? But if debug it under pdb:
>>
>> D:\Works\Python>py -m pdb test0.py
>> > d:\works\python\test0.py(1)<module>()
>> -> password = 'bad'
>> (Pdb) tbreak 3
>> Breakpoint 1 at d:\works\python\test0.py:3
>> (Pdb) cont
>> Deleted breakpoint 1 at d:\works\python\test0.py:3
>> > d:\works\python\test0.py(3)<module>()
>> -> print('bad password')
>> (Pdb) cont
>> bad password
>> The program exited via sys.exit(). Exit status: None
>> > d:\works\python\test0.py(1)<module>()
>> -> password = 'bad'
>> (Pdb) Traceback (most recent call last):
>> ? File "C:\Python34\lib\pdb.py", line 1661, in main
>> ??? pdb._runscript(mainpyfile)
>> ? File "C:\Python34\lib\pdb.py", line 1542, in _runscript
>> ??? self.run(statement)
>> ? File "C:\Python34\lib\bdb.py", line 431, in run
>> ??? exec(cmd, globals, locals)
>> ? File "<string>", line 1, in <module>
>> ? File "d:\works\python\test0.py", line 1, in <module>
>> ??? password = 'bad'
>> ? File "d:\works\python\test0.py", line 1, in <module>
>> ??? password = 'bad'
>> ? File "C:\Python34\lib\bdb.py", line 48, in trace_dispatch
>> ??? return self.dispatch_line(frame)
>> ? File "C:\Python34\lib\bdb.py", line 66, in dispatch_line
>> ??? self.user_line(frame)
>> ? File "C:\Python34\lib\pdb.py", line 259, in user_line
>> ??? self.interaction(frame, None)
>> ? File "C:\Python34\lib\pdb.py", line 346, in interaction
>> ??? self._cmdloop()
>> ? File "C:\Python34\lib\pdb.py", line 319, in _cmdloop
>> ??? self.cmdloop()
>> ? File "C:\Python34\lib\cmd.py", line 126, in cmdloop
>> ??? line = input(self.prompt)
>> ValueError: I/O operation on closed file.
>> Uncaught exception. Entering post mortem debugging
>> Running 'cont' or 'step' will restart the program
>> > c:\python34\lib\cmd.py(126)cmdloop()
>> -> line = input(self.prompt)
>> (Pdb) Traceback (most recent call last):
>> ? File "C:\Python34\lib\pdb.py", line 1661, in main
>> ??? pdb._runscript(mainpyfile)
>> ? File "C:\Python34\lib\pdb.py", line 1542, in _runscript
>> ??? self.run(statement)
>> ? File "C:\Python34\lib\bdb.py", line 431, in run
>> ??? exec(cmd, globals, locals)
>> ? File "<string>", line 1, in <module>
>> ? File "d:\works\python\test0.py", line 1, in <module>
>> ??? password = 'bad'
>> ? File "d:\works\python\test0.py", line 1, in <module>
>> ??? password = 'bad'
>> ? File "C:\Python34\lib\bdb.py", line 48, in trace_dispatch
>> ??? return self.dispatch_line(frame)
>> ? File "C:\Python34\lib\bdb.py", line 66, in dispatch_line
>> ??? self.user_line(frame)
>> ? File "C:\Python34\lib\pdb.py", line 259, in user_line
>> ??? self.interaction(frame, None)
>> ? File "C:\Python34\lib\pdb.py", line 346, in interaction
>> ??? self._cmdloop()
>> ? File "C:\Python34\lib\pdb.py", line 319, in _cmdloop
>> ??? self.cmdloop()
>> ? File "C:\Python34\lib\cmd.py", line 126, in cmdloop
>> ??? line = input(self.prompt)
>> ValueError: I/O operation on closed file.
>>
>> During handling of the above exception, another exception occurred:
>>
>> Traceback (most recent call last):
>> ? File "C:\Python34\lib\runpy.py", line 170, in _run_module_as_main
>> ??? "__main__", mod_spec)
>> ? File "C:\Python34\lib\runpy.py", line 85, in _run_code
>> ??? exec(code, run_globals)
>> ? File "C:\Python34\lib\pdb.py", line 1688, in <module>
>> ??? pdb.main()
>> ? File "C:\Python34\lib\pdb.py", line 1680, in main
>> ??? pdb.interaction(None, t)
>> ? File "C:\Python34\lib\pdb.py", line 346, in interaction
>> ??? self._cmdloop()
>> ? File "C:\Python34\lib\pdb.py", line 319, in _cmdloop
>> ??? self.cmdloop()
>> ? File "C:\Python34\lib\cmd.py", line 126, in cmdloop
>> ??? line = input(self.prompt)
>> ValueError: I/O operation on closed file.
>>
>> D:\Works\Python>
>>
>> ??? How to get rid of these?
>>
>> Best Regards,
>> Jach Fong
>>
>>
>> ---
>> This email has been checked for viruses by Avast antivirus software.
>> https://www.avast.com/antivirus
>>
>>
> 
>