Two things going on here:
1) Validation that involves checking multiple fields should be done in
the form's clean() method rather than its clean_FIELDNAME method. Not
all fields are guaranteed to have been added to cleaned_data until you
reach the clean() method.
2) Try using self.cleaned_data.get('canvas_height') and
self.cleaned_data.get('file') instead of directly referencing the
dictionary indices. get() will return None if the key is not found
(or if the value is None), whereas accessing the index will throw a
KeyError if the key is not found -- which you then need to catch if
you don't want to interrupt script execution.