#100DaysOfCode in Python Transcripts
Chapter: Days 25-27: Error handling
Lecture: Demo: Error types
0:00 So we've stopped the errors from crashing our program
0:02 but we can't do anything meaningful,
0:04 we can only say, you know, that didn't work, sorry.
0:08 Let's be a little more prescriptive here.
0:11 So up the top,
0:12 we need to work with the various exception types,
0:15 so we have to import some stuff.
0:16 So we'll say request.exceptions down here.
0:20 Now in this area, we want to catch
0:22 the different types of problems that can occur,
0:25 and the way we do that is we say except:
0:27 and then we say 'different types',
0:29 remember when we looked at that trace back,
0:31 the first thing is the category, or the type of error,
0:33 and the second part after the colon was the description,
0:36 just more details.
0:38 So what we need to do is,
0:39 we could have potentially multiple ones of these,
0:41 we'll say this, we'll say,
0:43 request.exceptions.connectionerror, okay?
0:48 We be able to just go like this,
0:50 and just do a little print here and say,
0:54 so maybe we'll say something like,
0:55 'couldn't find the server, check your network connection',
0:58 make this really obvious like that,
1:01 and print that out here.
1:02 Now, it could be if this was like a web browser
1:05 they could've typed it in wrong,
1:06 but we've hard-coded the URL, we know that that's correct,
1:09 so if they can't connect it's not the server doesn't exist,
1:12 it's really that there's some problem
1:14 getting to this one known server.
1:16 So let's try this again with my internet off.
1:22 We'll come down here and search for test.
1:23 'Could not find server, check your internet connection.'
1:26 Oh, how cool, that's way more helpful,
1:28 we know exactly what went wrong
1:30 when we want to handle that problem here.
1:33 Now the network is back and we have another problem.
1:36 If we enter no search term it's going to freak out
1:39 and throw what's called a ValueError, and say,
1:41 'hey that didn't work.'
1:43 But all we get is, oh, that didn't work.
1:45 So we could do a little bit better here,
1:47 we could say,
1:48 put this core exception here,
1:51 and we could put some details like so.
1:54 This is kind of going to be our fallback,
1:56 we don't really know what's going on,
1:57 so we're going to try this.
1:58 Let's try again.
2:00 Oh, that didn't work, 'you must specify a search term',
2:03 and if you're just debugging it to try to figure out
2:05 what's going on here you'd say,
2:06 what is the actual thing that I'm getting here?
2:08 What is this actual error?
2:11 It's a ValueError.
2:13 So now let's go add an except clause for that.
2:19 Now notice this is gray because we're not using it,
2:21 and when we're not, we can just leave it off like,
2:24 as we did with the request here.
2:26 So we don't need any details, so now,
2:28 try to run this with nothing,
2:29 'error, you must specify a search term.'
2:31 Now we can really tell the user what's going on.
2:34 We have a few more errors
2:35 that we could potentially deal with,
2:38 I wouldn't leave this here like that,
2:43 and these other errors are just kind of random stuff
2:45 that I threw in there to make the program crash.
2:47 One is a StopIteration,
2:49 and the other is the one that you saw at the opening,
2:50 which is a TypeError I believe.
2:53 So we'll just let those fall through here
2:54 because there's not anything we can particularly do,
2:57 they're just sort of random noise in the system
2:59 to make sure you get some interesting crashes.
3:01 These have real fixes,
3:03 so we have a special message for them.
3:06 The final important thing to see here
3:07 in this whole try except block,
3:10 is the order in which we specify the errors.
3:13 If we change this around
3:15 and we put this up here at the front,
3:17 PyCharm's probably going to freak out
3:18 and say, "no no no, you'll never be getting to these."
3:22 If we have something general,
3:24 and this is a derivative of exception,
3:27 this is not going to work.
3:28 It's actually just going to stop.
3:29 The way it works is, it runs,
3:31 if there's an error it just looks, goes, 'is the error this type, is the error this type,
3:34 is the error that type?'
3:35 And, if it comes along here,
3:37 this is going to catch almost everything,
3:39 and so, even though we have this,
3:41 you'll see if I run it and I hit enter,
3:43 that didn't work.
3:44 I mean, we still did sort of print this out,
3:45 but it's not letting us get to the part where we expect it.
3:51 So it's super important that this goes
3:52 from most specific to most general.
3:55 So, here we have it;
3:57 we've figured out what types of errors
3:58 our program might throw,
4:00 and then we can handle them independently based on the type.