Variable Scope
Last updated on 2023-05-08 | Edit this page
Estimated time: 20 minutes
Overview
Questions
- How do function calls actually work?
- How can I determine where errors occurred?
Objectives
- Identify local and global variables.
- Identify parameters as local variables.
- Read a traceback and determine the file, function, and line number on which the error occurred, the type of error, and the error message.
The scope of a variable is the part of a program that can ‘see’ that variable.
- There are only so many sensible names for variables.
- People using functions shouldn’t have to worry about what variable names the author of the function used.
- People writing functions shouldn’t have to worry about what variable names the function’s caller uses.
- The part of a program in which a variable is visible is called its scope.
-
pressure
is a global variable.- Defined outside any particular function.
- Visible everywhere.
-
t
andtemperature
are local variables inadjust
.- Defined in the function.
- Not visible in the main program.
- Remember: a function parameter is a variable that is automatically assigned a value when the function is called.
OUTPUT
adjusted: 0.01238691049085659
ERROR
Traceback (most recent call last):
File "/Users/swcarpentry/foo.py", line 8, in <module>
print('temperature after call:', temperature)
NameError: name 'temperature' is not defined
There are missing parentheses and colon ():
after the
function call, and the print messages don’t appear aligned via
whitespace
ERROR
File "<stdin>", line 1
def another_function
^
SyntaxError: invalid syntax
ERROR
File "<stdin>", line 1
print("Syntax errors are annoying.")
^
IndentationError: unexpected indent
ERROR
File "<stdin>", line 1
print("But at least Python tells us about them!")
^
IndentationError: unexpected indent
Working function:
Reading Error Messages
Read the traceback below, and identify the following:
- How many levels does the traceback have?
- What is the file name where the error occurred?
- What is the function name where the error occurred?
- On which line number in this function did the error occur?
- What is the type of error?
- What is the error message?
ERROR
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-2-e4c4cbafeeb5> in <module>()
1 import errors_02
----> 2 errors_02.print_friday_message()
/Users/ghopper/thesis/code/errors_02.py in print_friday_message()
13
14 def print_friday_message():
---> 15 print_message("Friday")
/Users/ghopper/thesis/code/errors_02.py in print_message(day)
9 "sunday": "Aw, the weekend is almost over."
10 }
---> 11 print(messages[day])
12
13
KeyError: 'Friday'
- 3 levels, since there are 3 arrows
- The file is
errors_02.py
- The function is
print_message()
- Line 11
- It is a
KeyError
- There isn’t really a message; you’re supposed to infer that
Friday
is not a key inmessages
.