Locked learning resources

Join us and get access to thousands of tutorials and a community of expert Pythonistas.

Unlock This Lesson

Locked learning resources

This lesson is for members only. Join us and get access to thousands of tutorials and a community of expert Pythonistas.

Unlock This Lesson

Using Linters for Better Code

You’ve seen the criteria used by PEP8 to judge high quality code. In this lesson, you’ll learn how to use some tools to make sure your code stays PEP 8 compliant. You’ll learn about linters, debuggers and autoformatters. The lesson covers pycodestyle, flake8 and black.

You’ll see how to install, run, and configure these tools to suit your project’s requirements.

00:00 You’ve made it through the basics of the style considerations PEP 8 is all about. In this last video, you’ll learn how to use some tools to help make sure your code stays PEP 8 compliant even if you don’t remember. Before that, let’s talk briefly about when you don’t want to follow PEP 8. The answer is basically never. Sometimes, though, you need to take extra considerations.

00:23 Some of these are: if compliance would break compatibility with other software, surrounding code is not PEP 8 compliant, or if your code needs to remain compatible with older versions of Python that may not behave the same way. With this in mind, you should always try to start projects with PEP 8 compliance as this will make sticking to it much easier.

00:43 So before you go to start that next project, let’s discuss some tools to help you follow the guidelines. We’re going to cover linters and autoformatters. Linters will help you debug issues by alerting you to them before you run your code and provide suggestions on how to fix them.

01:00 You can usually find an extension for your text editor that will flag problems as you write code, but we’ll cover two command line versions, pycodestyle and flake8. To get pycodestyle, go to your terminal

01:13 and just type in pip install pycodestyle.

01:20 All right, so pycodestyle is a linter that will check your Python code against the style conventions of PEP 8. So if you look here, I’ve got a couple issues—I don’t have a space after this hash sign for this comment, I don’t have any whitespace here, the whitespace is all mixed up here, this is using an == instead of is.

01:40 There’s quite a few PEP 8 issues. To use pycodestyle, you can type in pycodestyle and then the name of your script. And once you run that, you’ll get an output that will contain all of your PEP 8 issues.

01:56 So here, I’ve got a block comment should start with '# ', which it doesn’t. I’m missing whitespace after some commas. I have a comparison to None that should be if the condition is None. Some more whitespace, no whitespace around an operator—and you get a pretty good idea of where you need to fix things because you’ve got your line number and your character number of where the problem is. So if we go back to the script—you’ll note, this is the start of the script here. So define a my_list, but then this arg is not defined.

02:29 So sometimes you want to include a debugger with your linter. A debugger is just going to try to catch those errors that you’d run into when you actually run the script. One debugger that you can use is called flake8.

02:40 So just pycodestyle, you can do pip install flake8.

02:49 And what this does is combine pycodestyle with pyflakes, which is a debugger. Run it just in the same way that you did pycodestyle.

02:58 I can just say flake8 pep_talk.py.

03:03 And if I open this up, you can see all the same PEP 8 issues as before, but now also this undefined name 'arg', which as you can see, this has not been defined yet.

03:17 So flake8 can be a nice combination of a debugger and a PEP 8 linter. It’ll give you a little more bang for the buck when you go to run it.

03:26 Let’s say you’ve got a script that’s, you know, a couple hundred lines long, maybe a thousand lines long. You run your linter and you get a ton of issues that you don’t have the time to fix. In this case, you can try out an autoformatter.

03:41 These are programs that will actually refactor your code to meet PEP 8 requirements. Let me close this terminal out.

03:49 If you go to open up a new terminal, one autoformatter you can try is called black. black is a good autoformatter that follows most of PEP 8.

04:03 You should note that you need to have at least Python 3.6 installed to use black. I’m actually going to make this terminal a little bit smaller so that you can see the entire script here. And if you watch, when I run black with the script and hit Enter, like magic—I’ve had whitespace appear here, there’s whitespace here, there’s whitespace after these commas, and everything looks much better.

04:32 You can note that it didn’t do anything to fix this argument problem here, where this value is not defined yet. And if you look at the output, it gives you this nice little message that it’s all done and tells you that it reformatted 1 file.

04:45 Another thing to note about black is that it doesn’t exactly follow PEP 8, and one of the biggest deviations is that its default line length is 88 characters, as opposed to PEP 8’s 79-character limit.

04:59 You can actually fix this with a command line argument. Before running black and then your script, you can actually put in --line-length=79 and then your script. Run it like that, and it’ll do the same thing.

05:17 You can see that because I didn’t have any lines that were that long, it just says that 1 file left unchanged.

Avatar image for arnautovdmitry2015

arnautovdmitry2015 on April 2, 2019

Thank you, Joe, for this nice course. It was very helpful.

Avatar image for Joe Tatusko

Joe Tatusko RP Team on April 2, 2019

You are very welcome! Just a couple tweaks to how you write code can make a huge difference

Avatar image for Abby Jones

Abby Jones on June 25, 2019

This was fantastic, and normally something I wouldn’t have looked at. This was extremely valuable.

Avatar image for victorariasvanegas

victorariasvanegas on Dec. 1, 2019

Thanks really good course.

Avatar image for Pakorn

Pakorn on Dec. 11, 2019

great course, Thanks.

Avatar image for km

km on Jan. 3, 2020

Another great piece of content

Avatar image for swapnilc17

swapnilc17 on Jan. 9, 2020

Nice course, Thank you.

Avatar image for gmodelgado

gmodelgado on Jan. 28, 2020

Cool Course, Thanks!!

Avatar image for xiliang

xiliang on April 5, 2020

Very helpful. I have coding in Python as a data scientist for 2 years and I just realized I have never followed the PEP8 guideline. Shame on me! Keep up the good work.

Avatar image for Ghani

Ghani on Oct. 26, 2020

Very informative course; thank you so much!

Avatar image for Leif

Leif on Jan. 30, 2021

Great Video! I have a question about your setup. What code editor and syntax color scheme are you using? I find it easy on on the eyes.

Avatar image for goncaloccoutinho

goncaloccoutinho on Nov. 9, 2021

Very informative course, thanks!

Become a Member to join the conversation.