`finger` doesn't consider a not found situation to be worth a non zero return code.
There are however real error cases like:
$ finger -x
finger: invalid option -- 'x'
usage: finger [-lmps] [login ...]
$ echo $?
1
Changing `finger` behavior would be trivial by modifying its source code but this was not done probably not to break scripts that expect finger never to fail.
I'm afraid you have to keep on with post-processing finger output to achieve your goal if you need to stick with `finger`..
Alternatively, you might use `getent` which supplies a useful return value:
$ getent passwd root
root:x:0:0:root:/root:/bin/bash
$ echo $?
0
$ getent passwd foo
$ echo $?
2