Pylint showing invalid variable name in output

PythonPylint

Python Problem Overview


I made a simple python script to post data on a website.

#Imports

url_to_short = sys.argv[1]

post_url = 'https://www.googleapis.com/urlshortener/v1/url'
headers = {'Content-Type': 'application/json'}

data = {'longUrl': url_to_short}
post_data = json.dumps(data)

req = urllib2.Request(post_url, post_data, headers)
resp = urllib2.urlopen(req)

if resp.getcode() == 200:  
    content = json.loads(resp.read())

#Other stuff

Now I thought lets check my script for coding standards with pylint tool.

My pylint output is as follows:

************* Module post
C:  1,0: Missing docstring
C:  6,0: Invalid name "url_to_short" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  8,0: Invalid name "post_url" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C:  9,0: Invalid name "headers" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

# Other stuff

Now, my question is why pylint is showing my variable names as Invalid name. Is naming variable this way a wrong coding convention.

My complete pylint output.

Python Solutions


Solution 1 - Python

As your code is not contained in a class or function it is expecting those variables to be constants and as such they should be uppercase.

You can read PEP8 for further information.

Solution 2 - Python

EDIT: As others have mentioned, pylint expects that global variables should be UPPERCASE. If the warnings really bother you, you can circumvent them by wrapping small snippets like this in a main()-function and then use the if __name__ == "__main__"-convention. Or if you care, you can modify the regular expressions that pylint uses to validate variable names.

From the developers of Pylint.

> In this case Pylint is telling me that those variables appear to be constants and should be all UPPERCASE. This rule is in fact a naming convention that is specific to the folks at Logilab who created Pylint. That is the way they have chosen to name those variables. You too can create your own in-house naming conventions but for the purpose of this tutorial, we want to stick to the PEP-8 standard. In this case, the variables I declared should follow the convention of all lowercase. The appropriate rule would be something like: "should match [a-z_][a-z0-9_]{2,30}$". Notice the lowercase letters in the regular expression (a-z versus A-Z)

You can test it by running: pylint --const-rgx='[a-z_][a-z0-9_]{2,30}$' x.py

Solution 3 - Python

It's because url_to_short is declared in the global namespace, and pylint requires global variables (e.g. constants) to be named ALL_UPPERCASE.
Therefore it checks whether your variable name matches the regex used for globals, which is: (([A-Z_][A-Z0-9_]*)|(__.*__))$ (note the A-Z ranges). Hence the Invalid name error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRanRagView Question on Stackoverflow
Solution 1 - PythonChristian WittsView Answer on Stackoverflow
Solution 2 - PythonmsvalkonView Answer on Stackoverflow
Solution 3 - PythonrubikView Answer on Stackoverflow