Escreva para o arquivo UTF-8 em Python

Estou realmente confuso com ocodecs.open function. Quando eu faço

file = codecs.open("temp", "w", "utf-8")
file.write(codecs.BOM_UTF8)
file.close()

Dá-me o erro

UnicodeDecodeError: o codec 'ascii' não pode decodificar o byte 0xef na posição 0: ordinal fora do intervalo (128)

Se eu fizer

file = open("temp", "w")
file.write(codecs.BOM_UTF8)
file.close()

Funciona bem

Questã é por que o primeiro método falha? E como insiro o bom?

Se o segundo método for a maneira correta de fazê-lo, qual é o sentido de usarcodecs.open(filename, "w", "utf-8")?

questionAnswers(8)

yourAnswerToTheQuestion