WEBVTT

1
00:00:00.380 --> 00:00:01.940
<v ->Hi guys and welcome back!</v>

2
00:00:01.940 --> 00:00:03.120
In this video, we're going to learn

3
00:00:03.120 --> 00:00:06.513
about Custom Error Classes and how they can be helpful.

4
00:00:08.140 --> 00:00:09.658
Let's say we've got a class book

5
00:00:09.658 --> 00:00:13.760
that defines an init method and sets three properties,

6
00:00:13.760 --> 00:00:16.780
the name, the page count, and the pages read.

7
00:00:16.780 --> 00:00:19.120
Note that I have used type hinting here

8
00:00:19.120 --> 00:00:21.150
to tell me that the name should be a string

9
00:00:21.150 --> 00:00:23.150
and the page count should be an integer.

10
00:00:24.660 --> 00:00:27.040
I'm going to also add a couple other methods here

11
00:00:27.040 --> 00:00:29.600
just to review what we've already learned.

12
00:00:29.600 --> 00:00:33.200
The repr method that we return some information

13
00:00:33.200 --> 00:00:36.451
about the book in a format that will allow me

14
00:00:36.451 --> 00:00:38.560
to then recreate this book,

15
00:00:38.560 --> 00:00:41.260
so it contains all of the information about this book.

16
00:00:42.580 --> 00:00:44.800
And by the way, you can put a return statement

17
00:00:44.800 --> 00:00:48.300
in multiple lines by using brackets and like that

18
00:00:48.300 --> 00:00:50.190
if you want to return a longer string

19
00:00:50.190 --> 00:00:52.390
and you don't want your code to be too long.

20
00:00:53.860 --> 00:00:54.790
Something like that.

21
00:00:54.790 --> 00:00:56.010
If I put it in a single line,

22
00:00:56.010 --> 00:00:58.100
it would be too long and I would have to scroll

23
00:00:58.100 --> 00:00:59.100
in order to read it.

24
00:01:01.340 --> 00:01:03.250
And I'm also going to make a read function

25
00:01:03.250 --> 00:01:06.590
that allows me to read a bunch of pages.

26
00:01:06.590 --> 00:01:09.370
So I will allow it to take in that argument

27
00:01:09.370 --> 00:01:12.970
and say self.pages read plus equal pages.

28
00:01:12.970 --> 00:01:15.167
And then I will print out a message saying,

29
00:01:15.167 --> 00:01:18.747
"You have now read that number of pages."

30
00:01:20.320 --> 00:01:21.240
Perfect!

31
00:01:21.240 --> 00:01:24.450
Note this is a simple book class that allows me

32
00:01:24.450 --> 00:01:25.530
to create new books.

33
00:01:25.530 --> 00:01:29.830
For example, Python 101 can be a book called "Python 101"

34
00:01:29.830 --> 00:01:31.520
and it may have 50 pages.

35
00:01:31.520 --> 00:01:34.660
And then I can do python101.read 35

36
00:01:36.160 --> 00:01:38.000
and then I'm going to also read 50 pages.

37
00:01:38.000 --> 00:01:39.890
So clearly, you can't do that, right?

38
00:01:39.890 --> 00:01:43.760
Because it only has 50 pages, you can't read 85 pages.

39
00:01:43.760 --> 00:01:45.733
But what happens if we press play?

40
00:01:47.600 --> 00:01:50.580
Well you have now read 35 pages out of 50

41
00:01:50.580 --> 00:01:53.689
and then you have now read 85 pages out of 50.

42
00:01:53.689 --> 00:01:55.340
Not great!

43
00:01:55.340 --> 00:01:57.850
So we are going to use arrows instead

44
00:01:57.850 --> 00:02:00.920
in order to prevent that from happening.

45
00:02:00.920 --> 00:02:03.820
Note here in the read method,

46
00:02:03.820 --> 00:02:06.420
just before we add anything to pages read,

47
00:02:06.420 --> 00:02:10.290
we're gonna say if self.pages read plus pages

48
00:02:10.290 --> 00:02:11.950
is greater than self.page,

49
00:02:13.770 --> 00:02:15.767
then we're going to raise an error and we're gonna say,

50
00:02:15.767 --> 00:02:19.390
"Too many pages read error."

51
00:02:19.390 --> 00:02:21.380
And in here, we're going to put in the message

52
00:02:21.380 --> 00:02:23.563
that will say something like this.

53
00:02:25.410 --> 00:02:28.220
Of course, this error is not built into Python

54
00:02:28.220 --> 00:02:31.410
because it's a bit too specific for our programme logic.

55
00:02:31.410 --> 00:02:34.670
We could use something like value error.

56
00:02:34.670 --> 00:02:38.630
After all, this page is the wrong amount

57
00:02:38.630 --> 00:02:40.610
given the context of our programme

58
00:02:40.610 --> 00:02:42.330
but it's not really specific enough.

59
00:02:42.330 --> 00:02:44.770
So when we are getting an error back

60
00:02:44.770 --> 00:02:46.760
in our console, it may be helpful to have

61
00:02:46.760 --> 00:02:48.163
a slightly nicer name.

62
00:02:49.090 --> 00:02:52.040
Note what we can do is before the class there,

63
00:02:52.040 --> 00:02:53.360
I usually like to define my errors

64
00:02:53.360 --> 00:02:55.060
at the top of the file, but it doesn't really matter.

65
00:02:55.060 --> 00:02:57.123
You can put them at the bottom if you want.

66
00:02:57.123 --> 00:03:01.070
We can say, "Too many pages read error,"

67
00:03:01.070 --> 00:03:05.550
and we're gonna make it inherit from value error.

68
00:03:05.550 --> 00:03:08.130
You can inherit from any built-in exception or error

69
00:03:08.130 --> 00:03:11.890
if you like, in order to make it an exception class.

70
00:03:11.890 --> 00:03:16.890
If you don't inherit from an error or the exception class

71
00:03:17.100 --> 00:03:19.360
then you won't be able to raise it

72
00:03:19.360 --> 00:03:21.810
because these classes have some methods inside them

73
00:03:21.810 --> 00:03:25.210
that you need in order to be able to raise them as errors.

74
00:03:25.210 --> 00:03:27.360
Note you can create that and you actually don't have

75
00:03:27.360 --> 00:03:29.900
to do anything inside it because it already extend

76
00:03:29.900 --> 00:03:32.510
a message and all that, so you can just put pass.

77
00:03:32.510 --> 00:03:34.624
And this too many pages read error

78
00:03:34.624 --> 00:03:37.000
will essentially just be a copy of value error

79
00:03:37.000 --> 00:03:38.890
but with a different name.

80
00:03:38.890 --> 00:03:40.530
Note now that when we raise this error,

81
00:03:40.530 --> 00:03:42.870
we're going to get a nice message there

82
00:03:42.870 --> 00:03:45.187
that says, "Too many pages read error.

83
00:03:45.187 --> 00:03:46.457
"You tried to read 85 pages,

84
00:03:46.457 --> 00:03:48.307
"but this book only has 50 pages."

85
00:03:49.820 --> 00:03:52.250
In addition, you get your traceback what tells you

86
00:03:52.250 --> 00:03:54.300
where the problem was, which is that you tried

87
00:03:54.300 --> 00:03:58.010
to read 50 pages there but you'd already read some before.

88
00:03:58.010 --> 00:03:59.440
When you're looking back through your code,

89
00:03:59.440 --> 00:04:02.230
you can very easily determine where abouts

90
00:04:02.230 --> 00:04:03.290
in your code the problem happened

91
00:04:03.290 --> 00:04:05.030
and you can read through it and try to find out

92
00:04:05.030 --> 00:04:06.093
what the problem was.

93
00:04:07.140 --> 00:04:09.770
Now of course, this isn't great for users,

94
00:04:09.770 --> 00:04:12.440
so if you wanted to print a nicer message,

95
00:04:12.440 --> 00:04:15.983
you can always try to do that.

96
00:04:18.489 --> 00:04:22.527
And if not, except it, and print the message on its own.

97
00:04:25.110 --> 00:04:25.943
Just like that.

98
00:04:28.830 --> 00:04:30.630
That's it for creating custom classes.

99
00:04:30.630 --> 00:04:32.510
It's really very straightforward.

100
00:04:32.510 --> 00:04:34.070
You just inherit from the most

101
00:04:34.070 --> 00:04:36.220
relevant built-in error class,

102
00:04:36.220 --> 00:04:39.400
like value error, runtime error, or even type error

103
00:04:39.400 --> 00:04:41.420
and you name it as you would like.

104
00:04:41.420 --> 00:04:43.490
That gives you a slightly nicer name

105
00:04:43.490 --> 00:04:45.650
and the ability to find your problems

106
00:04:45.650 --> 00:04:46.870
a bit more easily.

107
00:04:46.870 --> 00:04:48.610
Most of the time, you don't have to put anything

108
00:04:48.610 --> 00:04:49.790
inside the error classes,

109
00:04:49.790 --> 00:04:52.080
just giving them a new name is good enough.

110
00:04:52.080 --> 00:04:54.350
But you can do, if you want.

111
00:04:54.350 --> 00:04:57.070
We're not gonna cover how to populate the body

112
00:04:57.070 --> 00:04:59.140
of your custom error classes in this course, though.

113
00:04:59.140 --> 00:05:00.890
That's a little bit more advanced.

114
00:05:00.890 --> 00:05:02.330
Thank you for joining me in this one

115
00:05:02.330 --> 00:05:04.080
and I'll see you in the next video.

