.. _tut-appendix: ******** 附录 ******** .. _tut-interac: äº¤äº’æ¨¡å¼ ================ .. _tut-error: é”™è¯¯å¤„ç† -------------- 有错误å‘生时,解释器会打å°ä¸€ä¸ªé”™è¯¯ä¿¡æ¯å’Œæ ˆè·Ÿè¸ªå™¨ã€‚在交互模å¼ä¸‹ï¼Œå®ƒè¿”回主æç¤ºç¬¦ï¼Œå¦‚æžœä»Žæ–‡ä»¶è¾“å…¥æ‰§è¡Œï¼Œå®ƒåœ¨æ‰“å°æ ˆè·Ÿè¸ªå™¨åŽä»¥éžé›¶çжæ€é€€å‡ºã€‚(异常å¯ä»¥ç”± `try <https://docs.python.org/2.7/reference/compound_stmts.html#try>`_ è¯å¥ä¸çš„ `except <https://docs.python.org/2.7/reference/compound_stmts.html#except>`_ å奿¥æŽ§åˆ¶ï¼Œè¿™æ ·å°±ä¸ä¼šå‡ºçŽ°ä¸Šæ–‡ä¸çš„错误信æ¯) 有一些éžå¸¸è‡´å‘½çš„错误会导致éžé›¶çжæ€ä¸‹é€€å‡ºï¼Œè¿™é€šå¸¸ç”±å†…éƒ¨çŸ›ç›¾å’Œå†…å˜æº¢å‡ºé€ æˆã€‚所有的错误信æ¯éƒ½å†™å…¥æ ‡å‡†é”™è¯¯æµï¼›å‘½ä»¤ä¸æ‰§è¡Œçš„æ™®é€šè¾“å‡ºå†™å…¥æ ‡å‡†è¾“å‡ºã€‚ 在主æç¤ºç¬¦æˆ–从属æç¤ºç¬¦ä¸è¾“入䏿–符 (通常是 Control-C 或者 DEL) å°±ä¼šå–æ¶ˆå½“å‰è¾“入,回到主命令行。[#]_ æ‰§è¡Œå‘½ä»¤æ—¶è¾“å…¥ä¸€ä¸ªä¸æ–符会抛出一个 `KeyboardInterrupt <https://docs.python.org/2.7/library/exceptions.html#exceptions.KeyboardInterrupt>`_ 异常,它å¯ä»¥è¢« `try <https://docs.python.org/2.7/reference/compound_stmts.html#try>`_ è¯å¥æˆªèŽ·ã€‚ .. _tut-scripts: 执行 Python 脚本 ------------------------- BSD 类的 Unix 系统ä¸ï¼ŒPython 脚本å¯ä»¥åƒ Shell è„šæœ¬é‚£æ ·ç›´æŽ¥æ‰§è¡Œã€‚åªè¦åœ¨è„šæœ¬æ–‡ä»¶å¼€å¤´å†™ä¸€è¡Œå‘½ä»¤ï¼ŒæŒ‡å®šæ–‡ä»¶å’Œæ¨¡å¼:: #! /usr/bin/env python (首先è¦ç¡®è®¤ Python 解释器在用户的 :envvar:`PATH` ä¸) ``#!`` 必须是文件的å‰ä¸¤ä¸ªå—符,在æŸäº›å¹³å°ä¸Šï¼Œç¬¬ä¸€è¡Œå¿…须以 Unix é£Žæ ¼çš„è¡Œç»“æŸç¬¦ (``'\n'``)结æŸï¼Œä¸èƒ½ç”¨ Windows (``'\r\n'``) 的结æŸç¬¦ã€‚注æ„,``'#'`` 是 Python 䏿˜¯è¡Œæ³¨é‡Šçš„起始符。 脚本å¯ä»¥é€šè¿‡ :program:`chmod` 命令指定执行模å¼å’Œæƒé™ã€‚ .. code-block:: bash $ chmod +x myscript.py Windows 系统上没有“执行模å¼â€ã€‚Python 安装程åºè‡ªåЍ将 ``.py`` 文件关è”到 ``python.exe`` ,所以在 Python æ–‡ä»¶å›¾æ ‡ä¸ŠåŒå‡»ï¼Œå®ƒå°±ä¼šä½œä¸ºè„šæœ¬æ‰§è¡Œã€‚åŒæ · ``.pyw`` 也åšäº†è¿™æ ·çš„å…³è”,通常它执行时ä¸ä¼šæ˜¾ç¤ºæŽ§åˆ¶å°çª—å£ã€‚ .. _tut-startup: 交互执行文件 ---------------------------- 使用 Python 解释器的时候,我们å¯èƒ½éœ€è¦åœ¨æ¯æ¬¡è§£é‡Šå™¨å¯åŠ¨æ—¶æ‰§è¡Œä¸€äº›å‘½ä»¤ã€‚ä½ å¯ä»¥åœ¨ä¸€ä¸ªæ–‡ä»¶ä¸åŒ…å«ä½ æƒ³è¦æ‰§è¡Œçš„命令,设定一个å为 `PYTHONSTARTUP <https://docs.python.org/2.7/using/cmdline.html#envvar-PYTHONSTARTUP>`_ 的环境å˜é‡æ¥æŒ‡å®šè¿™ä¸ªæ–‡ä»¶ã€‚这类似于 Unix shell çš„ :file:`.profile` 文件。 è¿™ä¸ªæ–‡ä»¶åœ¨äº¤äº’ä¼šè¯æœŸæ˜¯åªè¯»çš„,当 Python 从脚本ä¸è§£è¯»æ–‡ä»¶æˆ–以终端 :file:`/dev/tty` åšä¸ºå¤–éƒ¨å‘½ä»¤æºæ—¶åˆ™ä¸ä¼šå¦‚æ¤ (å°½ç®¡å®ƒä»¬çš„è¡Œä¸ºå¾ˆåƒæ˜¯å¤„åœ¨äº¤äº’ä¼šè¯æœŸ) 它与解释器执行的命令处在åŒä¸€ä¸ªå‘½å空间,所以由它定义或引用的一切å¯ä»¥åœ¨è§£é‡Šå™¨ä¸ä¸å—é™åˆ¶åœ°ä½¿ç”¨ã€‚ä½ ä¹Ÿå¯ä»¥åœ¨è¿™ä¸ªæ–‡ä»¶ä¸æ”¹å˜ ``sys.ps1`` å’Œ ``sys.ps2`` 指令。 å¦‚æžœä½ æƒ³è¦åœ¨å½“å‰ç›®å½•䏿‰§è¡Œé™„åŠ çš„å¯åŠ¨æ–‡ä»¶ï¼Œå¯ä»¥åœ¨å…¨å±€å¯åŠ¨æ–‡ä»¶ä¸åŠ å…¥ç±»ä¼¼ä»¥ä¸‹çš„ä»£ç :``if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')``ã€‚å¦‚æžœä½ æƒ³è¦åœ¨æŸä¸ªè„šæœ¬ä¸ä½¿ç”¨å¯åŠ¨æ–‡ä»¶ï¼Œå¿…é¡»è¦åœ¨è„šæœ¬ä¸å†™å…¥è¿™æ ·çš„è¯å¥:: import os filename = os.environ.get('PYTHONSTARTUP') if filename and os.path.isfile(filename): with open(filename) as fobj: startup_file = fobj.read() exec(startup_file) .. _tut-customize: å®šåˆ¶æ¨¡å— ------------------------- Python æä¾›äº†ä¸¤ä¸ªé’©å (方法) æ¥æœ¬åœ°åŒ–: :mod:`sitecustomize` å’Œ :mod:`usercustomize`。为了è§è¯†å®ƒä»¬ï¼Œä½ é¦–å…ˆéœ€è¦æ‰¾åˆ°ä½ çš„ site-packages 的目录。å¯åЍ python 执行下é¢çš„代ç :: >>> import site >>> site.getusersitepackages() '/home/user/.local/lib/python2.7/site-packages' çŽ°åœ¨ä½ å¯ä»¥åœ¨ site-packages 的目录下创建 :file:`usercustomize.py` 文件,内容就悉å¬å°Šä¾¿äº†ã€‚è¿™ä¸ªæ–‡ä»¶å°†ä¼šå½±å“ python çš„æ¯æ¬¡è°ƒç”¨ï¼Œé™¤éžå¯åŠ¨çš„æ—¶å€™åŠ å…¥ `-s <https://docs.python.org/2.7/using/cmdline.html#cmdoption-s>`_ é€‰é¡¹ç¦æ¢è‡ªåŠ¨å¯¼å…¥ã€‚ :mod:`sitecustomize` 的工作方å¼ä¸€æ ·ï¼Œä½†æ˜¯æ˜¯ç”±ç”µè„‘的管ç†è´¦æˆ·åˆ›å»ºä»¥åŠåœ¨ :mod:`usercustomize` 之å‰å¯¼å…¥ã€‚具体å¯ä»¥å‚è§ `site <https://docs.python.org/2.7/library/site.html#module-site>`_ 。 .. rubric:: Footnotes .. [#] GNU Readline包的一个问题å¯èƒ½ç¦æ¢æ¤åŠŸèƒ½ã€‚