Locked learning resources

Join us and get access to thousands of tutorials and a community of expert Pythonistas.

Unlock This Lesson

Locked learning resources

This lesson is for members only. Join us and get access to thousands of tutorials and a community of expert Pythonistas.

Unlock This Lesson

Errors, Special Variables, and Reloading Imported Modules

00:00 Errors, Special Variables, and Reloading Imported Modules. When an error occurs in a REPL session, the interpreter automatically prints the corresponding error message and traceback.

00:12 Then it loops back to the REPL’s primary prompt. In the examples seen on-screen, you’ll see this behavior in action. Here, the string literal isn’t properly closed with a double quote (").

00:29 This raises a SyntaxError. This second example raises a ZeroDivisionError exception because you’re trying to divide 42 by 0.

00:41 And finally, you call the built-in sum() function without arguments, which raises a TypeError. All of these errors are immediately printed on the screen.

00:51 This behavior allows you to quickly and carefully inspect the error message and traceback in order to track the underlying issue and fix your code. Every time you run a statement that returns a value, the interpreter internally stores that value in a special variable named with a single underscore (_).

01:11 You can access and use this variable like any other variable in Python. On-screen are a couple of examples that show the implicit _ variable in action when you work with expressions.

01:24 Here you are evaluating expressions. They always have a return value, which is automatically assigned to the _ variable every time. When it comes to function calls, if the target function returns a value different from None, then _ will hold that value.

01:41 In contrast, if the function returns None, then the _ variable will keep the value at the preceding operation. The built-in pow() function computes the power of a number to a given exponent, returning the result.

01:56 Because the function’s result differs from None, the _ variable is automatically reassigned. In contrast, if you call a function that returns None, such as print(), then the _ variable remains unchanged.

02:17 Next, you use an assignment statement to create and initialize a counter variable. Assignments don’t return any value. Instead, they store a reference to a value in a variable.

02:31 In this case, the _ variable isn’t updated after running the statement. That’s why the variable still contains the number 16 from the previous examples.

02:42 Note that accessing a variable in an interactive session returns the value referenced by that variable. In this case, that value is also assigned to the _ variable.

02:59 Because _ is a regular Python variable, you can use it in expressions and statements. Here you first create a list of values. Then you call len() to get the number of values in the list.

03:15 Python automatically stores this value in underscore (_). Finally, you use _ to compute the mean of your list of values.

03:28 When using the _ variable in a REPL session, keep in mind that this variable only appears in interactive mode. If you run your code in script mode, then you won’t get this implicit behavior.

03:42 Let’s say you’re writing a Python module with some functions for one of your projects. At the same time, you are using Python in interactive mode to test the module’s code in real time.

03:54 Let’s say you have the modules seen on-screen. Here you define a greet() function that prints a greeting message on the screen. Next, on-screen, you’ll see how to load and use this code in a REPL session.

04:22 Now say that you want to add a new argument to your function. The argument will be a Boolean flag that allows printing the greeting message in uppercase letters.

04:32 To do this, you may modify it in the ways seen on-screen.

04:54 This update allows you to call greet() with an upper argument. If you set the argument to True, then the message will be in uppercase letters.

05:06 Now you want to try your changes in the current REPL session, so you import the module again, hoping to run the new version of greet() as seen.

05:22 But why do you have an unexpected argument? For efficiency reasons, running the import, again after updating something in greeting.py doesn’t reload the module.

05:32 Python doesn’t load imported modules again when you rerun the import. If you want to work around this behavior without closing your current REPL session and opening a new one, then you can use the reload() function from importlib.

06:00 Now the function works. The reload() function has taken care of loading the new version of the greeting module. You can use this trick whenever you’re working on a module in your code editor and testing your changes in a REPL session.

06:18 Now that you’ve learned the basics of entering and executing code in a Python interactive shell, it’s time to explore and learn about a few editing features that the standard REPL provides.

Become a Member to join the conversation.