5.7 More on Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.8 Comparing Sequences and Other Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6 Modules 41 6.1 More on Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6.1.1 Executing modules as scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.1.2 The Module Search Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.1.3 “Compiled” Python files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.2 Standard Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.3 The$_{dir()}$ Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.4 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.4.1 Importing * From a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.4.2 Intra-package References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.4.3 Packages in Multiple Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 7 Input and Output 49 7.1 Fancier Output Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.1.1 Formatted String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.1.2 The String format() Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.1.3 Manual String Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.1.4 Old string formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.2 Reading and Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7.2.1 Methods of File Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.2.2 Saving structured data with$_{json}$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 8 Errors and Exceptions 57 8.1 Syntax Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 8.2 Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 8.3 Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.4 Raising Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 8.5 Exception Chaining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.6 User-defined Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.7 Defining Clean-up Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.8 Predefined Clean-up Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9 Classes 65 9.1 A Word About Names and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 9.2 Python Scopes and Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 9.2.1 Scopes and Namespaces Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 9.3 A First Look at Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 9.3.1 Class Definition Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 9.3.2 Class Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 9.3.3 Instance Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9.3.4 Method Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9.3.5 Class and Instance Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 9.4 Random Remarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.5 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 9.5.1 Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 9.6 Private Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.7 Odds and Ends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 9.8 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 9.9 Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.10 Generator Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 10 Brief Tour of the Standard Library 79 10.1 Operating System Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 10.2 File Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 10.3 Command Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 10.4 Error Output Redirection and Program Termination . . . . . . . . . . . . . . . . . . . . . . . . . 80 ii