Morse Code Conversion
My remarks are similar to last time.  morse_alphabet should be MORSE_ALPHABET.  Repeated string concatenation (decoded += …) is bad for performance.  The main task could be accomplished using a one-liner substitution.

MORSE_ALPHABET = {
    ' '     : ' ',        # Note: Changed the key from '' to ' '
    '.-'    : 'A',
    '-...'  : 'B',
    '-.-.'  : 'C',
    …
}

def decode(morse):
    return re.sub(' ?( |[.-]*)', lambda m: MORSE_ALPHABET.get(m.group(1)), morse)


The main code would be simpler if you used fileinput.  Despite the current Pokémon craze, you should not Catch 'Em All, but only catch the exceptions that you intend to handle.

def main():
    try:
        for line in fileinput.input():
            print(decode(line), end='')
    except IOError as e:
        sys.exit(e)

if __name__ == "__main__":
    main()