Skip to main content

Avoiding Crashes, Try...except ,You are a Software Developer! , Traceback

 

Avoiding Crashes


Sometimes, we just can't code around a crash. It's coming anyway, and all you can do is brace for impact.
Until now!
Let's look at an example based on yesterday's lesson. 


👉 In this example, if the 'Stuff.mine' file doesn't exist, then the code will throw a 'no such file' error.


myStuff = []
f.open("Stuff.mine","r")
myStuff = eval(f.read())
f.close()
for row in myStuff:
  print(row)

Try...except

The new construct to get around this is called try.... except
All the code that should work goes inside the try.


The error messages/instructions to handle any errors running the try code go inside the except

👉 Like this:


myStuff = []

try:

  f.open("Stuff.mine","r")

  myStuff = eval(f.read())

  f.close()

# Try to find a file called 'Stuff.mine' and open it

except:

  print("ERROR: Unable to load")

# If the file can't be found, show the error instead of crashing the whole program

  

for row in myStuff:

  print(row)



You are a Software Developer!


try.... except is great for improving the user experience to reduce frustration.
However, there are problems with just putting the whole code in a 'try except'.
As developers (yes you are a software developer now), it'd be nice to know what sort of error has occurred so that we have a better idea of how to fix it 


We can tell except what type of error(s) to look for. Exception (capital 'E') means 'every type'. I've captured the error type in the 'err' variable and printed it out to tell me what the error is. Here's a list of some built in except error codes


👉 Look at how I've extended the except now.


myStuff = []

try:

  f.open("Stuff.mine","r")

  myStuff = eval(f.read())

  f.close()

# Try to find a file called 'Stuff.mine' and open it

except Exception as err:

  print("ERROR: Unable to load")

  print(err)

  

for row in myStuff:

  print(row)



Traceback

We could even get rid of the 'err' variable entirely and print a traceback, which will show you the red error tracing you see when python crashes.


I've created a 'debugMode' variable at the top of my code and pu the traceback in an if inside the except.


👉 This lets me show/hide the tracebacks easily by setting debugMode to True/False:


debugMode = True

myStuff = []

try:

  f.open("Stuff.mine","r")

  myStuff = eval(f.read())

  f.close()

# Try to find a file called 'Stuff.mine' and open it

except Exception:

  print("ERROR: Unable to load")

  if debugMode:

    print(traceback)

for row in myStuff:

  print(row)








Comments

Popular posts from this blog

ALL ABOUT WHILE LOOP

 WHILE LOOP  A  while  loop allows your code to repeat itself based on a condition you set.   EXAMPLE : counter = 0 while counter < 10:   print(counter)   counter +=1 Infinite Loop  You have to be  really  careful that you don't accidentally invoke an infinite loop! This is where the computer will loop code until the end of time. Without a break. Forever.  This is just saying "count to 10 by 1 each time." to make the loop end. Don't forget, if your  condition  is a  >  then you might need to  -= . This will subtract from the variable instead of adding to it.   EXAMPLE : counter = 0 while counter < 10:   print(counter)    counter += 1

Automate! Automate!

 Making this customizable 👉So how about making our search user customizable? In the code below, I have: Asked the user to input an artist (line 14) Tidied up their input (line 15) formatted the search URL as an fString that includes the artist (line 19) Here's tAutomate! Automate! We are so close. I can taste it, folks! Massive kudos on getting this far! Today's lesson, however, will work best if you have one of Replit's paid for features (hacker plan or cycles). Free plan Repls 'fall asleep' after a while. Automation kinda relies on the Repl being always on. If you have hacker plan or you've bought some cycles, then you can enable always on in the drop down menu that appears when you click your Repl name (top left).he code: This is important because when our repl is always running, it can keep track of time and schedule events. 👉 I've set up a simple schedule that prints out a clock emoji every couple of seconds. It works like this: Import schedule librar...

WHAT IS Nesting

 WHAT IS Nesting  Nesting is where we put an  if  statement within an  if  statement using the power of indenting. The second  if  statement within the first  if  statement must be indented and its  print  statement needs to be indented one more time.  EXAMPLE: