[ ] will return a value if one exists, otherwise it returns nil. On the other hand, fetch can return a KeyError if a value doesn't exist. It can also return a default value or run a block if a value doesn't exist for a key.