exception && package操作

优快云的自动生成目录真的是太猥琐了,使用右侧的目录方便查看!

exception && package操作

Python的Exception

异常的完整捕捉格式

# exception完整捕捉逻辑代码!
try:
    num1= int(input("输入一个整数:"))
    num2 = int(input("请再输入输入一个整数:"))
    result = num1 / num2
    print(result)

# 已知异常的捕捉.
except ValueError:
    print("请输入整数!")
except ZeroDivisionError:
    print("除数不能为0!")

# 未知异常的捕捉.
except Exception as result:
    print("未知异常 %s" % result)

# 无异常则执行.
else:
    print("代码运行正常,无异常产生!")

# 有无异常均正常执行!
finally:
    print("无论是否出现异常,均执行的代码!")

print("*" *35)

运行结果:

输入一个整数:45
请再输入输入一个整数:0
除数不能为0!
无论是否出现异常,均执行的代码!
***********************************
输入一个整数:12
请再输入输入一个整数:p
请输入整数!
无论是否出现异常,均执行的代码!
***********************************
输入一个整数:45
请再输入输入一个整数:45
1.0
代码运行正常,无异常产生!
无论是否出现异常,均执行的代码!
***********************************

自定义的异常捕捉

def check_password():
    pwd = input("请输入密码:")
    if len(pwd) >= 8:
        return pwd
    # 密码长度不够,则自定义异常并且抛出.
    print("自定义异常抛出!")
    ex = Exception("异常:密码长度不够!")
    raise ex


try:
    print(check_password())
except Exception as result:
    print(result)

print("*" *35)

运行结果:

请输入密码:qweeeeeee
qweeeeeee
***********************************
请输入密码:qwee
自定义异常抛出!
异常:密码长度不够!
***********************************

异常提交到上一层

  • 以下例子虽然举的不恰当,但是也可以看出,可以通过return将其提交到上一层函数.
def input_test():
    return int(input("输入整数:"))


def test():
    return input_test()


try:
    print(test()) # 本质上是input_test,但是反应在test函数.
except Exception as result:
    print("未知错误:%s" % result)

运行结果:

输入整数:PP
未知错误:invalid literal for int() with base 10: 'PP'

for…else

  • for与exception可以联合起来使用,若for的运行时没有被打断则运行else,否则不运行.
# 特殊使用方法,完整迭代,有则返回,无则异常.
for i in range(5):
    print("this is %d" % i)
    if i == 3:
        break
else:
    print("若迭代是完整的,则输出改行,否则不输出.")

运行结果:

this is 0
this is 1
this is 2
this is 3

Package && Python

此处重点区分包的导入与模块导入的区别,以及掌握包/模块导入的注意事项,以及推荐的使用导入方式。

模块的导入

  • 模块的概念:
    模块是 Python 程序架构的一个核心概念,每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块。

  • 模块的两种导入方式:

# method1.
import module_1, module_2

# method2,推荐此法.
import module_1
import module_2 
# python的别名导入,一般是模块名称太长导致的.
import numpy as np

注意:模块别名应该符合大驼峰命名法.

驼峰命名法

  • 小驼峰法
    变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。譬如:

    int myStudentCount;
    
  • 大驼峰法
    相比小驼峰法,大驼峰法(即帕斯卡命名法)把第一个单词的首字母也大写了。
    常用于类名,命名空间等,譬如:

    public class DataBaseUser;
    
  • from...import 导入

如果希望从某一个模块中,导入 部分 工具,就可以使用 from ... import 的方式导入。区别于 importimport 是把模块中所有工具全部导入,并且通过 模块名/别名 访问。

# for example
from random import randint # (as short_name)
rand_number = randint(0, 100)
print(rand_number)
  • from...import *
# 导入所在模块的所有工具函数.
from numpy import *

注意:这种方式不推荐使用,因为函数重名/函数被覆盖/运行的不是语气函数 并没有任何的提示。

任何时刻,都要注意重名的问题!

# 将所有的部分都写在main函数里面,方面测试使用,但是不希望导包的时候执行该部分.
def main():
    # ...
    pass

# 根据 __name__ 判断是否执行下方代码,true表示执行,否则不执行.
if __name__ == "__main__":
    main()

包的制作&&发布

  • 保持的目录结构,__init__文件内容.
from . import test_one
from . import test_two

    1. setup文件内容
from distutils.core import setup

setup(name="test_main",  # 包名
      version="0.0.1",  # 版本
      description="test_main测试组模块.",  # 描述信息
      long_description="test_main测试组模块.",  # 完整描述信息
      author="test_cc",  # 作者
      author_email="1234567@qq.com",  # 作者邮箱
      url="www.baidu.com",  # 主页
      py_modules=["test_main.test_one",
                  "test_main.test_two"])
  • 构建模块.
python3 setup.py build
  • 生成发布压缩包.
python3 setup.py sdist

注意:解释器的版本问题!

制作后包的安装

为保证顺序的完整性且保证分段阅读,此处不再重新开始顺序,继续从第五位置开始。

  • 安装模块
tar -zxvf test_main-0.0.1.tar.gz 
sudo python3 setup.py install
  • 卸载模块

直接从安装目录下,把安装模块的目录删除就可以.

cd /usr/local/lib/python3.5/dist-packages/
sudo rm -r test_main*
import random

#  查看内置函数.
print(random.__dir__())
# 查看函数模块位置.
print(random.__file__)

pip 安装第三方库

pip 是一个现代的,通用的 Python 包管理工具,提供了对 Python 包的查找、下载、安装、卸载等功能。

安装和卸载命令如下:

# 将模块安装到 Python 2.x 环境.
sudo pip install pygame
sudo pip uninstall pygame

# 将模块安装到 Python 3.x 环境.
sudo pip3 install pygame
sudo pip3 uninstall pygame

在 Mac 下安装 iPython

sudo pip install ipython.

在 Linux 下安装 iPython

sudo apt install ipython
sudo apt install ipython3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值