I am trying to read a file and when any error occurs, it should match pattern and return value

My code looks like 

```
read(File) ->
  try file:read_file(File) of
    {ok, Content} -> Content
  catch
    error:E -> {"Error reading", File, E};
    _:_     -> {allError}
  end.

```

and when I run, I see 

```
1> file_read:read("/Users/harith/Downloads/er.txt").
<<"This file is read by erlang program\n">>
2> file_read:read("non-existent-file").
** exception error: no try clause matching {error,enoent}
     in function  file_read:read/1 (/Users/harith/code/IdeaProjects/others/erlang/programmingErlang/src/file_read.erl, line 16)
3>

```

Why is it not catching the most generic clause `_:_`?