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

WHAT IS ELIF

  What the elif is this? The  elif  command (which stands for 'elseif') allows you to ask 2, 3, 4 or 142 questions using the same input! This command must be in a certain place. You can have as many  elif  statements as you want, but they  must  go in between  if  and  else  and have the same indentation. The  print  statements in your  elif  command need to line up with the indent of the other  print  statements. EXAMPLE :  print("SECURE LOGIN") username = input("Username > ") password = input("Password> ") if username == "mark" and password == "password":  print("Welcome Mark!") elif username == "suzanne":  print("Hey there Suzanne!") else:  print("Go away!") E

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