summaryrefslogtreecommitdiffstats
path: root/Mac/Demo/using.html
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1996-04-15 12:25:44 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1996-04-15 12:25:44 (GMT)
commitbd9565a3e58f9837bae937a7dbf6246e93efc320 (patch)
tree651407785205fce14aedf2b1ac8046af8930db3f /Mac/Demo/using.html
parentd544d0126d8c41afc5ba85f62a4ecba49c29ea30 (diff)
downloadcpython-bd9565a3e58f9837bae937a7dbf6246e93efc320.zip
cpython-bd9565a3e58f9837bae937a7dbf6246e93efc320.tar.gz
cpython-bd9565a3e58f9837bae937a7dbf6246e93efc320.tar.bz2
Clarified working directory stuff, added some paragraphs on using
import and reload() to run scripts.
Diffstat (limited to 'Mac/Demo/using.html')
-rw-r--r--Mac/Demo/using.html442
1 files changed, 262 insertions, 180 deletions
diff --git a/Mac/Demo/using.html b/Mac/Demo/using.html
index 872bb9e..5f20097 100644
--- a/Mac/Demo/using.html
+++ b/Mac/Demo/using.html
@@ -7,104 +7,154 @@
<EM>(preliminary)</EM>
<HR>
-This document is an introduction to using Python on the Apple Macintosh.
-It does not introduce the language itself, for this you should refer
-to the <A HREF="http://www.python.org/doc/tut/tut.html">Python Tutorial</A>
-by Guido van Rossum. This guide
-more-or-less replaces chapter two of the tutorial, and provides some
-additional material. <p>
+This document is an introduction to using Python on the Apple
+Macintosh. It does not introduce the language itself, for this you
+should refer to the <A
+HREF="http://www.python.org/doc/tut/tut.html">Python Tutorial</A> by
+Guido van Rossum. This guide more-or-less replaces chapter two of the
+tutorial, and provides some additional material. <p>
-The document refers to Python 1.3.3 or higher, some of the features (like
-setting applet options) will not work in earlier versions of Python. <p>
+The document refers to Python 1.3.3 or higher, some of the features
+(like setting applet options) will not work in earlier versions of
+Python. <p>
<h2>Invoking the interpreter</h2>
-The name of the interpreter may differ on different installations: it may
-be called <CODE>Python</CODE>, <CODE>PythonPPC</CODE> (for powerpc macs) or
-<CODE>Python68K</CODE> (indeed, for 68K macs). It will always be recognizable by
-the "16 ton" icon, though. You start the interpreter in interactive mode by
-double-clicking it. <p>
+The name of the interpreter may differ on different installations: it
+may be called <CODE>Python</CODE>, <CODE>PythonPPC</CODE> (for powerpc
+macs) or <CODE>Python68K</CODE> (indeed, for 68K macs). It will always
+be recognizable by the "16 ton" icon, though. You start the
+interpreter in interactive mode by double-clicking it. <p>
<img src="html.icons/python.gif"><p>
-This should give you a text window with an informative version string and a prompt,
-something like the following:
+This should give you a text window with an informative version string
+and a prompt, something like the following:
<PRE>
Python 1.3.3 (Apr 7 1996) [CW PPC w/GUSI]
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
&gt;&gt;&gt;
</PRE>
-The version string tells you the version of Python, whether it was built for
-PPC or 68K macs and possibly some options used to build the interpreter. If
-you find a bug or have a question about how the interpreter works it is a good
-idea to include the version information in your message. <p>
-
-At the prompt you can type interactive python commands. See the tutorial for
-more information. The interactive window works more-or-less like a Communication
-Toolbox or Telnet window: you type commands at the bottom and terminate them with
-the <EM>[return]</EM> or <EM>[enter]</EM> key. Interpreter feedback also appears
-at the bottom of the window, and the contents scroll as output is added. You can
-use copy and paste in the normal way, but be sure to paste only at the bottom
-of the document.
+The version string tells you the version of Python, whether it was
+built for PPC or 68K macs and possibly some options used to build the
+interpreter. If you find a bug or have a question about how the
+interpreter works it is a good idea to include the version information
+in your message. <p>
+
+At the prompt you can type interactive python commands. See the
+tutorial for more information. The interactive window works
+more-or-less like a Communication Toolbox or Telnet window: you type
+commands at the bottom and terminate them with the <EM>[return]</EM>
+or <EM>[enter]</EM> key. Interpreter feedback also appears at the
+bottom of the window, and the contents scroll as output is added. You
+can use copy and paste in the normal way, but be sure to paste only at
+the bottom of the document.
<h2>Creating Python scripts</h2>
-The Python interpreter works in a way that is different from what you would
-expect of a macintosh program: the interpreter is just that: an interpreter.
-There is no builtin editor or other development support. Hence, to create
-a Python script you need an external text editor. For a first script you
-can use any editor that can create plain, unstyled text files, such as
-<CODE>SimpleText</CODE>. <p>
-
-For more serious scripts, though, it is advisable to use a programmers editor,
-such as <CODE>BBEdit</CODE> or <CODE>Alpha</CODE>. BBEdit is my favorite: it comes in a
-commercial version but also in a fully-functional free version
-<CODE>BBEdit Lite</CODE>. You can download it from the
-<A HREF="http://www.barebones.com/">BareBones</A> site.
-The free version will probably provide all the functionality you will ever need.
-Besides the standard edit facilities it has multi-file searches and many other
-goodies that can be very handy when editing programs. <p>
-
-After you have created your script in the editor of your choice you drop it on
-the interpreter. This will start the interpreter executing the script, again with
-a console window in which the output appears and in which you can type input if
-the script requires it. Normally the interpreter will close the window and quit
-as soon as the script is done executing, see below under
-<A HREF="#startup">startup options</A>
-for a way to change this. <p>
-
-It is a good idea to have the names of all your scripts end in <CODE>.py</CODE>. While
-this is not necessary for standalone scripts it is needed for modules, and it is
-probably a good idea to start the habit now. <p>
+The Python interpreter works in a way that is different from what you
+would expect of a macintosh program: the interpreter is just that: an
+interpreter. There is no builtin editor or other development
+support. Hence, to create a Python script you need an external text
+editor. For a first script you can use any editor that can create
+plain, unstyled text files, such as <CODE>SimpleText</CODE>. <p>
+
+For more serious scripts, though, it is advisable to use a programmers
+editor, such as <CODE>BBEdit</CODE> or <CODE>Alpha</CODE>. BBEdit is
+my favorite: it comes in a commercial version but also in a
+fully-functional free version <CODE>BBEdit Lite</CODE>. You can
+download it from the <A HREF="http://www.barebones.com/">BareBones</A>
+site. The free version will probably provide all the functionality
+you will ever need. Besides the standard edit facilities it has
+multi-file searches and many other goodies that can be very handy when
+editing programs. <p>
+
+After you have created your script in the editor of your choice you
+drop it on the interpreter. This will start the interpreter executing
+the script, again with a console window in which the output appears
+and in which you can type input if the script requires it. Normally
+the interpreter will close the window and quit as soon as the script
+is done executing, see below under <A HREF="#startup">startup
+options</A> for a way to change this. <p>
+
+It is a good idea to have the names of all your scripts end in
+<CODE>.py</CODE>. While this is not necessary for standalone scripts
+it is needed for modules, and it is probably a good idea to start the
+habit now. <p>
+
+If you do not like to start the Python interpreter afresh for each
+edit-run cycle you can use the <CODE>import</CODE> statement and
+<CODE>reload()</CODE> function to speed things up in some cases. Here
+is Guido's original comment for how to do this, from the 1.1 release
+notes: <P>
+
+<CITE>
+
+Make sure the program is a module file (filename must be a Python
+identifier followed by '<CODE>.py</CODE>'). You can then import it
+when you test it for the first time. There are now three
+possibilities: it contains a syntax error; it gets a runtime error
+(unhandled exception); or it runs OK but gives wrong results. (If it
+gives correct results, you are done testing and don't need to read the
+rest of this paragraph. :-) Note that the following is not
+Mac-specific -- it's just that on UNIX it's easier to restart the
+entire script so it's rarely useful. <P>
+
+Recovery from a syntax error is easy: edit the file and import it
+again. <P>
+
+Recovery from wrong output is almost as easy: edit the file and,
+instead of importing it, call the function <CODE>reload()</CODE> with
+the module name as argument (e.g., if your module is called
+<CODE>foo</CODE>, type <CODE>reload(foo)</CODE>). <P>
+
+Recovery from an exception is trickier. Once the syntax is correct, a
+'module' entry is placed in an internal table, and following import
+statements will not re-read the file, even if the module's
+initialization terminated with an error (one reason why this is done
+is so that mutually recursive modules are initialized only once). You
+must therefore force re-reading the module with <CODE>reload()</CODE>,
+however, if this happens the first time you try to import the module,
+the import statement itself has not completed, and your workspace does
+not know the module name (even though the internal table of moduesl
+does!). The trick is to first import the module again, then reload
+it. For instance, <CODE>import foo; reload(foo)</CODE>. Because the
+module object already exists internally, the import statement does not
+attempt to execute the module again -- it just places it in your
+workspace. </CITE>
<h2>Clickable python scripts</h2>
-If you create your script with the correct creator and type, creator <CODE>'Pyth'</CODE>
-and type <CODE>'TEXT'</CODE>, you can double-click your script and it will automatically
-invoke the interpreter. If you use BBEdit you can tell it about the Python file
-type by adding it to the "file types" sections of the preferences. Then, if you save
-a file for the first time you can tell BBEdit to save the file as a Python script
-through the "options" choice of the save dialog. <p>
+If you create your script with the correct creator and type, creator
+<CODE>'Pyth'</CODE> and type <CODE>'TEXT'</CODE>, you can double-click
+your script and it will automatically invoke the interpreter. If you
+use BBEdit you can tell it about the Python file type by adding it to
+the "file types" sections of the preferences. Then, if you save a file
+for the first time you can tell BBEdit to save the file as a Python
+script through the "options" choice of the save dialog. <p>
-The <CODE>Scripts</CODE> folder contains a script <CODE>fixfiletypes</CODE> that will
-recursively traverse a folder and set the correct creator and type for all files
-ending in <CODE>.py</CODE>. <p>
+The <CODE>Scripts</CODE> folder contains a script
+<CODE>fixfiletypes</CODE> that will recursively traverse a folder and
+set the correct creator and type for all files ending in
+<CODE>.py</CODE>. <p>
<h2>Interaction with the user</h2>
-Normally, the interpreter will check for user input (mouse clicks, keyboard
-input) every once in a while, so it is possible to switch to other applications
-while a script runs. It is also possible to interrupt the interpreter with
-the standard command-period keypress, this will raise the <CODE>KeyboardInterrupt</CODE>
-exception. Scripts may, however, turn off this behaviour to facilitate their
-own event handling. Such scripts can only be killed with the command-option-escape
-shortcut.
+Normally, the interpreter will check for user input (mouse clicks,
+keyboard input) every once in a while, so it is possible to switch to
+other applications while a script runs. It is also possible to
+interrupt the interpreter with the standard command-period keypress,
+this will raise the <CODE>KeyboardInterrupt</CODE> exception. Scripts
+may, however, turn off this behaviour to facilitate their own event
+handling. Such scripts can only be killed with the
+command-option-escape shortcut.
<h2><A NAME="startup">startup options</A></h2>
-If the <EM>option</EM> key is depressed when Python starts executing the
-interpreter will bring up an options dialog thru which you can influence the way
-the interpreter behaves. Keep the option key depressed until the dialog comes up. <p>
+If the <EM>option</EM> key is depressed when Python starts executing
+the interpreter will bring up an options dialog thru which you can
+influence the way the interpreter behaves. Keep the option key
+depressed until the dialog comes up. <p>
<img src="html.icons/options.gif"><p>
@@ -114,166 +164,198 @@ The options modify the interpreters behaviour in the following way:
exiting) after a script has terminated normally,
<li> for every module imported a line is printed telling you where the
module was loaded from,
-<li> do not print the values of expressions executed as statements in an
-interactive python,
+<li> do not print the values of expressions executed as statements in
+an interactive python,
<li> do not buffer stdout and stderr,
<li> print some debugging output during the parsing phase,
<li> keep the output window open when a script terminates.
</ul>
-In addition, you can enter a unix-style command line which is passed to the script
-in <CODE>sys.argv</CODE>. Sys.argv[0] is always the name of the script being executed,
-additional values can be passed here. Quoting works as expected. <p>
+In addition, you can enter a unix-style command line which is passed
+to the script in <CODE>sys.argv</CODE>. Sys.argv[0] is always the name
+of the script being executed, additional values can be passed
+here. Quoting works as expected. <p>
-The default options are also settable on a system-wide basis, see the section on
-<A HREF="#preferences">editing preferences</A>. <p>
+The default options are also settable on a system-wide basis, see the
+section on <A HREF="#preferences">editing preferences</A>. <p>
<h2>Module search path</h2>
-The module search path, <CODE>sys.path</CODE>, contains the folders python will search
-when you import a module. The path is settable on a system-wide basis (see the
-preferences section), and normally comprises the current folder (where the script
-lives), the <CODE>Lib</CODE> folder and some of its subfolders and possibly some more. <p>
+The module search path, <CODE>sys.path</CODE>, contains the folders
+python will search when you import a module. The path is settable on a
+system-wide basis (see the preferences section), and normally
+comprises the current folder (where the script lives), the
+<CODE>Lib</CODE> folder and some of its subfolders and possibly some
+more. <p>
<h2>Working folder</h2>
-The unix concept of a <I>working directory</I> does not translate directly to
-a similar concept on the Macintosh. To facilitate easy porting and the use of
-relative pathnames in scripts the interpreter simulates a working directory. When
-a script is started the initial working directory is the folder where the script
-lives. In case of an interactive interpreter the working directory is the folder
-where the interpreter lives. The "standard file" folder does <EM>not</EM> follow
-the working directory, it follows the standard MacOS rules (which are settable
-through a control panel since MacOS 7.5).
+The unix concept of a <I>working directory</I> does not translate
+directly to a similar concept on the Macintosh. To facilitate easy
+porting and the use of relative pathnames in scripts the interpreter
+simulates a working directory. When a script is started the initial
+working directory is the folder where the script lives. In case of an
+interactive interpreter the working directory is the folder where the
+interpreter lives. <P>
+
+By the way: the "standard file" folder, the folder that is presented
+to the user initially for an <I>open</I> or <I>save</I> dialog, does
+<EM>not</EM> follow the Python working directory. Which folder is
+initially shown to the user is usually one of (a) the application
+folder, (b) the "Documents" folder or (c) the folder most recently
+used for such a dialog (in any Python program). This is standard MacOS
+behaviour, so don't blame Python for it. The exact behaviour is
+settable through a control panel since System 7.5.
<h2>Interactive startup file</h2>
-If the folder containing the interpreter contains a file named <CODE>PythonStartup</CODE>
-this file is executed when you start an interactive interpreter. In this file you
-could import modules you often use and other such things. <p>
+If the folder containing the interpreter contains a file named
+<CODE>PythonStartup</CODE> this file is executed when you start an
+interactive interpreter. In this file you could import modules you
+often use and other such things. <p>
<h2>Compiled python scripts</h2>
-Once a python module has been imported the interpreter creates a compiled version
-which is stored in a file with the ".py" extension replaced by ".pyc". These
-compiled files, with creator <CODE>'Pyth'</CODE> and type <CODE>'PYC '</CODE> load faster
-when imported (because they do not have to be parsed). The <CODE>Lib</CODE> folder
-contains a script <CODE>compileall.py</CODE>, running this script will cause all modules
-along the python search path to be precompiled, which will speed up your programs.
-Compiled files are also double-clickable. <p>
+Once a python module has been imported the interpreter creates a
+compiled version which is stored in a file with the ".py" extension
+replaced by ".pyc". These compiled files, with creator
+<CODE>'Pyth'</CODE> and type <CODE>'PYC '</CODE> load faster when
+imported (because they do not have to be parsed). The <CODE>Lib</CODE>
+folder contains a script <CODE>compileall.py</CODE>, running this
+script will cause all modules along the python search path to be
+precompiled, which will speed up your programs. Compiled files are
+also double-clickable. <p>
<h2>Python resources</h2>
-MacPython has the ability to collect a number of compiled modules together
-in the resource fork of a single file. This feature is useful if you
-distribute a python program and want to minimize clutter: you can put all the
-needed modules in a single file (which could even be the interpreter itself). <p>
+MacPython has the ability to collect a number of compiled modules
+together in the resource fork of a single file. This feature is useful
+if you distribute a python program and want to minimize clutter: you
+can put all the needed modules in a single file (which could even be
+the interpreter itself). <p>
-If the module search path contains a filename as one of its entries (as opposed to
-a folder name, which is the normal case) this file will be searched for a resource
-with type <CODE>'PYC '</CODE> and a name matching the module being imported. <p>
+If the module search path contains a filename as one of its entries
+(as opposed to a folder name, which is the normal case) this file will
+be searched for a resource with type <CODE>'PYC '</CODE> and a name
+matching the module being imported. <p>
-The <CODE>scripts</CODE> folder contains a script <CODE>PackLibDir</CODE> which will convert
-a number of modules (or possibly a complete subtree full of modules) into such a
-resource file.
+The <CODE>scripts</CODE> folder contains a script
+<CODE>PackLibDir</CODE> which will convert a number of modules (or
+possibly a complete subtree full of modules) into such a resource
+file.
<h2><A NAME="preferences">Setting interpreter preferences</A></h2>
-The python interpreter keeps a preferences file in the standard location in the
-system folder. In this preferences file it remembers the default module search
-path and the default settings for the runtime options. The preferences are settable
-via <CODE>EditPythonPrefs</CODE>. For PPC python this is a standalone program living
-in the main Python folder, for 68K python it is a script in the <CODE>Scripts</CODE>
-folder. <p>
+The python interpreter keeps a preferences file in the standard
+location in the system folder. In this preferences file it remembers
+the default module search path and the default settings for the
+runtime options. The preferences are settable via
+<CODE>EditPythonPrefs</CODE>. For PPC python this is a standalone
+program living in the main Python folder, for 68K python it is a
+script in the <CODE>Scripts</CODE> folder. <p>
-The interface to edit the preferences is rather clunky for the current release. <p>
+The interface to edit the preferences is rather clunky for the current
+release. <p>
<img src="html.icons/preferences.gif"><p>
-In the editable text field at the top you enter the initial module search path,
-using newline as a separator. There are two special values you can use here:
-an initial substring <CODE>$(PYTHON)</CODE> will expand to the Python home folder
-and a value of <CODE>$(APPLICATION)</CODE> will expand to the the python application
-itself. Note that the text field may extend "beyond the bottom" even though it
-does not have a scroll bar. Using the arrow keys works, though.<p>
+In the editable text field at the top you enter the initial module
+search path, using newline as a separator. There are two special
+values you can use here: an initial substring <CODE>$(PYTHON)</CODE>
+will expand to the Python home folder and a value of
+<CODE>$(APPLICATION)</CODE> will expand to the the python application
+itself. Note that the text field may extend "beyond the bottom" even
+though it does not have a scroll bar. Using the arrow keys works,
+though.<p>
-The Python home folder $(PYTHON) is initially, when you execute the interpreter
-for the first time, set to the folder where the interpreter lives. You can change it
-here. <p>
+The Python home folder $(PYTHON) is initially, when you execute the
+interpreter for the first time, set to the folder where the
+interpreter lives. You can change it here. <p>
-Finally, you can set the default startup options here, through a sub-dialog.
+Finally, you can set the default startup options here, through a
+sub-dialog.
<h2>Applets</h2>
-An applet is a fullblown application written in Python, similar to an AppleScript
-applet (and completely different from a Java applet). Applets are currently only
-supported on PowerPC macintoshes, and are created using the <CODE>mkapplet</CODE>
-program. You create an applet by dropping the python source script onto mkapplet.
-The <CODE>Demo</CODE> folder contains an example of a more involved applet with its
-own resource file, etc. <p>
+An applet is a fullblown application written in Python, similar to an
+AppleScript applet (and completely different from a Java
+applet). Applets are currently only supported on PowerPC macintoshes,
+and are created using the <CODE>mkapplet</CODE> program. You create an
+applet by dropping the python source script onto mkapplet. The
+<CODE>Demo</CODE> folder contains an example of a more involved applet
+with its own resource file, etc. <p>
-Note that while an applet behaves as a fullblown Macintosh application it is
-not self-sufficient, so distributing it to a machine without an installed Python
-interpreter will not work: it needs the shared python execution engine
-<CODE>PythonCore</CODE>, and probably various modules from the Lib and PlugIns folders. <p>
+Note that while an applet behaves as a fullblown Macintosh application
+it is not self-sufficient, so distributing it to a machine without an
+installed Python interpreter will not work: it needs the shared python
+execution engine <CODE>PythonCore</CODE>, and probably various modules
+from the Lib and PlugIns folders. <p>
<h2>Customizing applets</h2>
-Applets can have their own settings for the startup options and module search
-path. Dropping an applet on the <CODE>EditPythonPrefs</CODE>
-application allows you to set
-these, in the same way as double-clicking EditPythonPrefs allows you to set
-the system-wide defaults. <p>
+Applets can have their own settings for the startup options and module
+search path. Dropping an applet on the <CODE>EditPythonPrefs</CODE>
+application allows you to set these, in the same way as
+double-clicking EditPythonPrefs allows you to set the system-wide
+defaults. <p>
-Actually, not only applets but also the interpreter itself can have non-default
-settings for path and options. If you make a copy of the interpreter and drop
-this copy onto EditPythonPrefs you will have an interpreter that has a different
-set of default settings.
+Actually, not only applets but also the interpreter itself can have
+non-default settings for path and options. If you make a copy of the
+interpreter and drop this copy onto EditPythonPrefs you will have an
+interpreter that has a different set of default settings.
<h2>Where to go from here</h2>
-The previously mentioned <A HREF="http://www.python.org/doc/tut/tut.html">Python
-Tutorial</A> is an excellent place to start reading if you have never used
-Python before. Other documentation such as the library reference manual is
-indexed at the <A HREF="http://www.python.org/doc/">Python Documentation</A>
-page. <p>
+The previously mentioned <A
+HREF="http://www.python.org/doc/tut/tut.html">Python Tutorial</A> is
+an excellent place to start reading if you have never used Python
+before. Other documentation such as the library reference manual is
+indexed at the <A HREF="http://www.python.org/doc/">Python
+Documentation</A> page. <p>
-There are some <A HREF="index.html">annotated sample programs</A> available
-that show some mac-specific issues, like use of various toolboxes and creation
-of Python applets. <p>
+There are some <A HREF="index.html">annotated sample programs</A>
+available that show some mac-specific issues, like use of various
+toolboxes and creation of Python applets. <p>
-Finally, the <CODE>Demo</CODE> folder in the Macintosh distribution contains
-a number of other example programs. Most of these are only very lightly documented,
-but they may help you to understand some aspects of using Python. <p>
+Finally, the <CODE>Demo</CODE> folder in the Macintosh distribution
+contains a number of other example programs. Most of these are only
+very lightly documented, but they may help you to understand some
+aspects of using Python. <p>
The best way to contact fellow Macintosh Python programmers is to join
-the MacPython Special Interest Group mailing list. Send a message with "info"
-in the body to <A HREF="mailto:pythonmac-sig-request@python.org">pythonmac-sig-request@python.org</A>
-or view the <A HREF="http://www.python.org/sigs/pythonmac-sig/">Pythonmac SIG page</A> on the
-<A HREF="http://www.python.org">www.python.org</A> WWW server. <p>
+the MacPython Special Interest Group mailing list. Send a message with
+"info" in the body to <A
+HREF="mailto:pythonmac-sig-request@python.org">pythonmac-sig-request@python.org</A>
+or view the <A
+HREF="http://www.python.org/sigs/pythonmac-sig/">Pythonmac SIG
+page</A> on the <A HREF="http://www.python.org">www.python.org</A> WWW
+server. <p>
<h2>Troubleshooting</h2>
-Python is a rather safe language, and hence it should be difficult to crash the
-interpreter of the system with a Python script. There is an exception to this rule,
-though: the modules that interface to the system toolboxes (windowing, quickdraw,
-etc) do very little error checking and therefore a misbehaving program using these
-modules may indeed crash the system. Such programs are unfortunately rather
-difficult to debug, since the crash does not generate the standard Python stack
-trace, obviously, and since debugging print statements will often interfere with
-the operation of the program. There is little to do about this currently. <p>
-
-Probably the most common cause of problems with modules ported from other
-systems is the Mac end-of-line convention. Where unix uses linefeed, 0x0d, to
-separate lines the mac uses carriage return, 0x0a. To complicate matters more
-a lot of mac programming editors like BBEdit and emacs will work happily with
-both conventions, so the file will appear to be correct in the editor but cause
-strange errors when imported. BBEdit has a popup menu which allows you to inspect
-(and set) the end-of-line convention used in a file. <p>
+Python is a rather safe language, and hence it should be difficult to
+crash the interpreter of the system with a Python script. There is an
+exception to this rule, though: the modules that interface to the
+system toolboxes (windowing, quickdraw, etc) do very little error
+checking and therefore a misbehaving program using these modules may
+indeed crash the system. Such programs are unfortunately rather
+difficult to debug, since the crash does not generate the standard
+Python stack trace, obviously, and since debugging print statements
+will often interfere with the operation of the program. There is
+little to do about this currently. <p>
+
+Probably the most common cause of problems with modules ported from
+other systems is the Mac end-of-line convention. Where unix uses
+linefeed, 0x0d, to separate lines the mac uses carriage return,
+0x0a. To complicate matters more a lot of mac programming editors like
+BBEdit and emacs will work happily with both conventions, so the file
+will appear to be correct in the editor but cause strange errors when
+imported. BBEdit has a popup menu which allows you to inspect (and
+set) the end-of-line convention used in a file. <p>
<HR>
<A HREF="http://www.cwi.nl/~jack">Jack Jansen</A>,
-<A HREF="mailto:jack@cwi.nl">jack@cwi.nl</A>, 7-Apr-1996.
+<A HREF="mailto:jack@cwi.nl">jack@cwi.nl</A>, 15-Apr-1996.
</BODY>
</HTML>