I don't have BeautifulSoup installed so I am unable to tell whether
a) for line in all_kbd:
processes one line at a time as given in the input, or do you get the clean
text in single lines in a list as shown in the example in the doc
b) for inside_line in line:
Does this process one token at a time?
In any case, it looks like the reason you got "None" in the output is
because you assume that every single line contains <code> and </code> tags.
This may not be case all the time, so, prior to printing extract_code
perhaps you could check whether that is None.