#!/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import sys def test(): args = sys.argv if len(args)==1: print('Hello, world!') elif len(args)==2: print('Hello, %s!' % args[1]) else: print('Too many arguments!') if __name__=='__main__': test() 第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行, 第2行注释表示.py文件本身使用标准UTF-8编码; sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称. 行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael'] if __name__=='__main__': test() 当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,然后继续执行test(); 当在其他地方导入该hello模块时,if判断将失败,不会执行到test()。 要想用到该模块下的函数,就需要这样调用hello.test(),或者import导入。 def _private_1(name): return 'Hello, %s' % name def _private_2(name): return 'Hi, %s' % name def greeting(name): if len(name) > 3: return _private_1(name) else: return _private_2(name) #我们在模块里公开greeting()函数,而把内部逻辑用private函数隐藏起来了,这样, #调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,
第三方模块
安装模块:如pip install Pillow
模块的搜索路径:
搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。
设置环境变量PYTHONPATH
,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
调试,异常处理
try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivisionError as e: print('except:', e) finally: print('finally...') print('END') 当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错, 则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块, 执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。 在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。 try: print('try...') r = 10 / int('2') print('result:', r) except ValueError as e: print('ValueError:', e) except ZeroDivisionError as e: print('ZeroDivisionError:', e) else: print('no error!') finally: print('finally...') print('END')
如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出。
分析最终原因在最下面,从上往下一层层链路定位原因。