use fail instead raise