Pycharm: Code completion not giving recommendations

后端 未结 5 2052
攒了一身酷
攒了一身酷 2020-12-01 09:56

Say I\'m working with the \'requests\' python library.

req = requests.get(\"http://google.com\")

Now after this, if I type req.

5条回答
  •  感情败类
    2020-12-01 10:29

    PyCharm has no idea what the dict contains if you fill it dynamically. So you have to hint PyCharm about the keys of dict beforehand. Prodict does exactly this to hint PyCharm, so you get code completion.

    First, if you want to be able to access the response object, then you have to get a json response and convert it to dict. That's achieved with .json() method of requests like this:

    response = requests.get("https://some.restservice.com/user/1").json()
    

    OK, we loaded it to a dict object, now you can access keys with bracket syntax:

    print(response['name'])
    

    Since you ask for auto code completion, you certainly need to hint PyCharm about the keys of dict. If you already know the respone schema, you can use Prodict to hint PyCharm:

    class Response(Prodict):
        name: str
        price: float
    
    response_dict = requests.get("https://some.restservice.com/user/1").json()
    
    response = Response.from_dict(response_dict)
    print(response.name)
    print(response.price)
    

    In the above code, both name and price attributes are auto-complated.

    If you don't know the schema of the response, then you can still use dot-notation to access dict attributes like this:

    response_dict = requests.get("https://some.restservice.com/user/1").json()
    response = Prodict.from_dict(response_dict)
    print(response.name)
    

    But code-completion will not be available since PyCharm can't know what the schema is.

    What's more is, Prodict class is derived directly from dict, so you can use it as dict too.

    This is the screenshot from Prodict repo that illustrates code completion:

    Disclaimer: I am the author of Prodict.

提交回复
热议问题