python-模块

#!/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解释器捕获,打印一个错误信息,然后程序退出。

分析最终原因在最下面,从上往下一层层链路定位原因。

记录错误

上一篇:零基础入门学Python(九)—— 异常处理


下一篇:大数协python训练营打卡笔记Task03