This is the same situation as Why is my ether balance 0 in geth, even though the sync is nearly complete? but with a slightly different "symptom".
To quote the important bit:
geth --fast
has an interesting effect: geth cannot provide any information about accounts or contracts until the sync is fully complete.
Try querying the balance again after eth.syncing returns false.
Note that in addition to accounts and contracts, you also cannot retrieve any information about blocks until the sync is complete.
When your sync is fully complete, syncing
will return false, like:
> w3.eth.syncing
False