Author Alexander Todorov
Recipients Alexander Todorov
Date 2016-07-20.12:05:57
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
$ python2
Python 2.7.5 (default, Oct 11 2015, 17:47:16) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import inspect
>>> from pykickstart import handlers
>>> inspect.getsource(handlers)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/", line 701, in getsource
    lines, lnum = getsourcelines(object)
  File "/usr/lib64/python2.7/", line 690, in getsourcelines
    lines, lnum = findsource(object)
  File "/usr/lib64/python2.7/", line 538, in findsource
    raise IOError('could not get source code')
IOError: could not get source code

There is a `pykickstart/handlers/` file which is empty and the above import works fine as you can see. However `inspect.findsource` raises an exception. The same problem exists in Python 3.5 as well. The error comes from here:

    532     module = getmodule(object, file)
    533     if module:
    534         lines = linecache.getlines(file, module.__dict__)
    535     else:
    536         lines = linecache.getlines(file)
    537     if not lines:
    538         raise IOError('could not get source code')

At this point `lines` is an empty list and we raise the exception. I'm hitting this problem when using a mutation testing tool that relies on getsource (which calls findsource). 

One possible workaround is to add a comment in the file and everything seems to be working then. Another one is to patch the tool I'm using to take into account empty files.
Date User Action Args
2016-07-20 12:05:58Alexander Todorovsetrecipients: + Alexander Todorov
2016-07-20 12:05:58Alexander Todorovsetmessageid: <>
2016-07-20 12:05:58Alexander Todorovlinkissue27578 messages
2016-07-20 12:05:57Alexander Todorovcreate