Countdown Timer for Tests
Your code has a massive bug.

What do you expect the output of the following to be?

import time
clock = time.clock # Reduce errors introduced by me 
start = clock()
for i in range(100):
    print(clock() - start)
    time.sleep(0.1)


So 100 * 0.1 = 10, so it should be about 10 seconds.
I ran this and the last print was 10.616061702852994.
This means that you get 6% more time using your program than you would otherwise.

This is a problem.
To fix it you should change the amount to sleep by subtracting from it the time it took to run the print.
And so you may get:

start = next_t = clock()
for _ in r:
    yield clock() - start
    next_t += d
    delay_t = next_t - clock()
    if delay_t &lt; 0:
        continue
    sleep(delay_t)


This is better, as the print shouldn't exceed the delay it's good enough.
But it's not as accurate as I'd like.
While 1.101270229875297 may seem pretty accurate you can change it so that it is instead 1.100000042666685 accurate.
By changing sleep to only do say 90% of the delay, and you create a while loop to do the rest you can get much more accuracy.
This may not be needed, but knowing that the code is pretty accurate is nice.

And so I'd use:

def delay(d, total_time):
    r = range(int(total_time * (1 / d)))
    clock = time.clock
    sleep = time.sleep

    t = start = next_t = clock()
    for _ in r:
        yield t - start
        next_t += d
        t = clock()
        delay_t = (next_t - t) * 0.9
        if delay_t &lt; 0:
            continue

        sleep(delay_t)
        while True:
            if t &gt;= next_t:
                break
            t = clock()


This means that you'll have to change your for loop slightly.
You will need to remove the time.sleep,
and the output is the equivalent of using range(secs + graceperiod).
And so if you put i = int(round(sec - i)) at the beginning of your for loop, it's almost identical.

And so to improve your code further I'd:


Remove the brackets around your if statements.
Use str.format, and change i = -i in your else.
Stop using os.system('clear'), and instead use \r and print '...',.
Change your four print '\a''s to be in a for loop.
Change cl to Color.
Add a main. And use the if __name__ == '__main__': guard.


resulting in:

import os
import time


class Color:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'


def delay(d, total_time):
    r = range(int(total_time * (1 / d)))
    clock = time.clock
    sleep = time.sleep

    t = start = next_t = clock()
    for _ in r:
        yield next_t - start
        next_t += d
        t = clock()
        delay_t = (next_t - t) * 0.9
        if delay_t &lt; 0:
            continue

        sleep(delay_t)
        while True:
            if t &gt;= next_t:
                break
            t = clock()


def countdown(secs, grace):
    prev = ''
    for diff in delay(1, secs + grace):
        i = int(round(secs - diff))
        if i &gt; 0:
            message = '{0.BOLD}{0.UNDERLINE}{1}:{2:&gt;02}{0.ENDC}'
        elif i == 0:
            message = 'STARTING GRACE PERIOD'
        else:
            message = 'EXTRA TIME: {1}:{2:&gt;02}'
            i = -i
        this = message.format(Color, i / 60, i % 60)
        print prev + '\r' + this,
        prev = '\r' + ' ' * len(this)

    for diff in delay(0.25, 1):
        print '\a',
    print '\a\nTime up!'

    os.system('say "Time up! Put down your pencil!"')


def main(secs, grace):
    try:
        raw_input('Ready? Press [Enter] to start. ')
        countdown(secs, grace)
    except EOFError:
        pass
    except KeyboardInterrupt:
        print Color.BOLD + Color.FAIL + '\nExiting Countdown' + Color.ENDC


if __name__ == '__main__':
    main(10, 10)