-
Notifications
You must be signed in to change notification settings - Fork 0
/
exception_handling.py
86 lines (68 loc) · 2.21 KB
/
exception_handling.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from typing import Union
from src.no_return import never_return
def handler() -> None:
try:
never_return()
print("never executed")
except Exception as ex:
print(f"I caught an exception: {ex}")
print("printed after the exception")
def funny_division(divisor: float) -> Union[str, float]:
try:
return 100 / divisor
except ZeroDivisionError:
return "zero is not a good idea!"
def funnier_division(divisor: int) -> Union[str, float]:
try:
if divisor == 13:
raise ValueError("13 is an unlucky number!")
return 100 / divisor
except (ZeroDivisionError, TypeError):
return "enter a number other than 0"
def funniest_division(division: int) -> Union[str, float]:
try:
if division == 13:
raise ValueError("13 is an unlucky number")
return 100 / division
except ZeroDivisionError:
return "Enter a number other than zero"
except TypeError:
return "Enter a numerical value"
except ValueError:
print("No,no,no, not 13!")
raise
def exception_args():
try:
raise ValueError("This is an argument")
except ValueError as e:
print(f"The exception arguments were {e.args}")
some_exceptions = [ValueError, TypeError, IndexError, None]
for choice in some_exceptions:
try:
print(f"\nRaising {choice}")
if choice:
raise choice("An error")
else:
print("no exception raised")
except ValueError:
print("Caught a ValueError")
except TypeError:
print("Caught a TypeError")
except Exception as e:
print(f"caught some other exception: {e.__class__.__name__}")
else:
print("THis code called if there no exception")
finally:
print("This cleanup code is always called")
def divide_with_exception(dividend: int,
divisor: int) -> None:
try:
print(f"{dividend/ divisor=}")
except ZeroDivisionError:
print("You can't divide by zero")
def divide_with_if(dividend: int,
divisor: int) -> None:
if divisor == 0:
print("You can't divide by zero")
else:
print(f"{dividend/ divisor=}")