#!/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解释器捕获,打印一个错误信息,然后程序退出。
分析最终原因在最下面,从上往下一层层链路定位原因。