title: How to get the specific token balance available at a give ETH address using web3.py
body: <p>I am getting started with web.py. I have a requirement where I need to get the available token balance at a given ETH address(this address is not the contract owner), going through the docs I stumble upon the following functiion :</p>
  
  <p><a href="https://web3py.readthedocs.io/en/stable/contracts.html#web3.contract.ContractFunction.call" rel="nofollow noreferrer">https://web3py.readthedocs.io/en/stable/contracts.html#web3.contract.ContractFunction.call</a></p>
  
  <pre><code>token_contract.functions.myBalance().call({'from': web3.eth.accounts[1]})
  </code></pre>
  
  <p>so on the above lines, I wrote this :</p>
  
  <pre><code>from web3 import HTTPProvider, Web3
  import requests
  
  w3 = Web3(HTTPProvider('https://ropsten.infura.io/RPw9nHRS7Ue47RaKVvHM'))
  
  url_eth = "https://api.etherscan.io/api"
  contract_address = '0x0CdCdA4E7FCDD461Ba82B61cBc4163E1022f22e4'
  API_ENDPOINT = url_eth+"?module=contract&amp;action=getabi&amp;address="+str(contract_address)
  
  r = requests.get(url = API_ENDPOINT)
  response = r.json()
  
  instance = w3.eth.contract(
      address=Web3.toChecksumAddress(contract_address),
      abi = response["result"]
  )
  send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
  balance = instance.functions.balance_of.call({'from':send_address}) 
  #balnce = instance.functions.myBalance.call({'from':send_address})
  print("----------------------",balance)
  </code></pre>
  
  <p>I get the following error :</p>
  
  <pre><code>"Are you sure you provided the correct contract abi?"
  web3.exceptions.MismatchedABI: ("The function 'balance_of' was not foundin this contract's abi. ", 'Are you sure you provided the correct contract abi?')
  </code></pre>
  
  <p>**Update ** I got rid of the above exception, now I'm getting the following exception :</p>
  
  <pre><code>send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
  balance = instance.functions.balanceOf.call(send_address)
  #Error :
  call_transaction = dict(**transaction)
  TypeError: type object argument after ** must be a mapping, not str
  </code></pre>
  
  <p>If I try this :</p>
  
  <pre><code>send_address = "0xF35A192475527f80EfcfeE5040C8B5BBB596F69A"
  balance = instance.functions.balanceOf.call({'from':send_address})
  #Error:
  AttributeError: 'balanceOf' object has no attribute 'args'
  </code></pre>