FileNotFoundError on PyPy
ram-bv opened this issue · 4 comments
I got this error running on pypy3.6-v7.3.0-linux64:
Error calling sys.excepthook:
Traceback (most recent call last):
File "<builtin>/app_main.py", line 146, in display_exception
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/__init__.py", line 53, in excepthook
formatted = format_exception(exc, value, tb)
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/__init__.py", line 49, in format_exception
return formatter.format_exception(exc, value, tb)
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 314, in format_exception
return u''.join(formatted for formatted in self._format_exception(value, tb))
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 314, in <genexpr>
return u''.join(formatted for formatted in self._format_exception(value, tb))
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 303, in _format_exception
formatted, colored_source = self.format_traceback(exc_traceback)
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 266, in format_traceback
formatted, colored = self.format_traceback_frame(tb)
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 226, in format_traceback_frame
filename, lineno, function, source, color_source, relevant_values = self.get_traceback_information(tb)
File "/floof/pypy3.6-v7.3.0-linux64/site-packages/better_exceptions/formatter.py", line 198, in get_traceback_information
frame_info = inspect.getframeinfo(tb)
File "/floof/pypy3.6-v7.3.0-linux64/lib-python/3/inspect.py", line 1458, in getframeinfo
filename = getsourcefile(frame) or getfile(frame)
File "/floof/pypy3.6-v7.3.0-linux64/lib-python/3/inspect.py", line 700, in getsourcefile
if getattr(getmodule(object, filename), '__loader__', None) is not None:
File "/floof/pypy3.6-v7.3.0-linux64/lib-python/3/inspect.py", line 729, in getmodule
file = getabsfile(object, _filename)
File "/floof/pypy3.6-v7.3.0-linux64/lib-python/3/inspect.py", line 713, in getabsfile
return os.path.normcase(os.path.abspath(_filename))
File "/floof/pypy3.6-v7.3.0-linux64/lib-python/3/posixpath.py", line 383, in abspath
cwd = os.getcwd()
FileNotFoundError: [Errno 2] No such file or directory
This is frustrating because I can't know what's the directory it's not finding. Can better-exceptions deal with such problems with graceful degradation? If a certain frame has a missing task, it's better to mark it as missing than crash.
I know it looks weird but I ran into this too recently, os.getcwd()
itself needs to open some file under the hood, I don't know why. Check if it works on its own?
Damn Alex, are you stalking me? ;)
This is my work account, by the way.
I confirmed os.getcwd()
works on its own. It's curious that it would fail when called inside abspath
. In any case I'd recommend that even if PyPy or the standard library have bugs in that code, that better-exception should degrade gracefully when they happen.
We can wrap it, though it's a matter of what to do in lieu of the existing logic if an exception is raised.
I'd show something like SOURCE UNAVAILABLE
for those frames, anything besides failing.