I use canvas.create_rectangle() to draw a rectangle and assign the drawn item to a specifier. But after I delete the item using canvas.delete(specifier), I can still run canvas.delete(specifier) successfully without causing error. May I know what is the reason behind this?
There's no way to really know why? since that's not documented anywhere (that I know of).
It's just a design decision made by the authors of tkinter: i.e. It is not considered an error if no items match. My guess is that since the intent is to get rid of something, whether or not it was there beforehand isn't important. 
If knowing whether it is or not does matter in your situation, you could use the Canvas.find_all() method  first and see if the list it returns is empty.
What does canvas.delete() do?