With the source
```
import cgitb
import sys
try:
f = open('non_exitant_file_path.foo')
except Exception as e:
cgitb.text(sys.exc_info())
```
we get the output
```
Traceback (most recent call last):
File "foo.py", line 22, in <module>
f = open('non_exitant_file_path.foo')
FileNotFoundError: [Errno 2] No such file or directory: 'non_exitant_file_path.foo'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "foo.py", line 24, in <module>
cgitb.text(sys.exc_info())
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/cgitb.py", line 245, in text
value = pydoc.text.repr(getattr(evalue, name))
AttributeError: characters_written
```
In bug #30554 it was brought up that there are attributes designed as invariant os some other as designed behavior. Unfortunately it was closed "as designed"
So this means that cgitb has a bug when text formatting a sys_exc traceback of an OSError.
This is hidden in the by the hook with this code form cgitb.py
by falling back to the standard formatter...
line 277
```
try:
doc = formatter(info, self.context)
except: # just in case something goes wrong
doc = ''.join(traceback.format_exception(*info))
plain = True
```
|