python之异常、模块、包

异常

  • 程序的错误有两种
    1. 编码出错,不符合语言的语法
    2. 运行时报错-------异常
  • 程序运行期间要避免异常
  • 程序一旦出现异常就终止运行

捕获异常

  • 语法:
try:
   可能出现异常的语句
except:
     出现异常后会自动执行的语句
     
如果try下面的代码没有出现异常,就不会执行except下面的代码语句
只有try下面的代码出现异常,except下面的代码才会执行
一旦异常被try捕捉,程序就不会报错终止
try:
    a = int(input("请输入一个整数"))
except:
    print("输入不正确")

捕捉不同类型异常

  • 语法:
try:
   可能出现异常的代码
except 异常类型1:
    出现异常类型1执行的代码
except 异常类型2:
    出现异常类型2执行的代码
except:
    出现未知异常类型执行的代码
try:
    a = int(input("请输入一个整数:"))
    b = int(input("请输入一个整数:"))
    print(a / b)
except ValueError:
    print("请输入一个可以转化为整数的数")
except ZeroDivisionError:
    print("除数不能为0")
except:
    print("未知错误")

# ValueError:输入的值不能转化为整数
# ZeroDivisionError:除数为0的时候报的错误

没有异常发生执行的代码

  • 语法:
try:
   可能出现异常的代码
except:
    出现异常执行的代码
else:
    没有发生异常执行的代码
try:
    a = int(input("请输入a的值;"))
    b = int(input("请输入b的值;"))
    print(a / b)
except:
    print("异常发生")
else:
    print("没有异常发生")

捕捉未知异常显示系统异常信息

try:
    a = int(input("请输入a的值:"))
    b = int(input("请输入b的值:"))
    print(a / b)
except Exception as result:     # 捕捉未知异常,把未知异常系统的错误提示显示出来
    print(result)

无论是否异常都要执行的代码

try:
   可能出现异常的代码
except:
    出现异常执行的代码
finally:
    无论是否异常都要执行的代码
try:
    a = int(input("请输入a的值;"))
    b = int(input("请输入b的值;"))
    print(a / b)
except:
    print("异常发生")
finally:
    print("无论是否有异常都要执行")

异常捕获完整语法

try:
   可能出现异常的代码
except 指定异常类型1:
       异常执行的代码
except 指定异常类型2:
       异常执行的代码
except Exception as result:
       异常执行代码
else:
       没有异常执行的代码
finally:
       无论是否有异常都执行的代码
try:
    a = int(input("请输入a的值:"))
    b = int(input("请输入b的值:"))
    print(a / b)
except ValueError:
    print("请输入正确的整数")
except ZeroDivisionError:
    print("除数不能为0")
except Exception as result:
    print("未知异常",result)
else:
    print("代码没有异常发生")
finally:
    print("代码执行完成")

主动抛出异常(raise)

  • 可以通过人为的抛出异常
  • 语法:

raise Exception(“异常描述”)

  • 主动抛出的异常同样会导致程序报错终止
print("开始")
raise Exception("主动抛出的异常")  # 人为抛出的异常
# 不论什么样的异常,只要不捕捉,代码就会报错终止
print("结束")    # 这里的print执行不了,因为上面一句一句抛出了异常,程序终止

捕捉主动抛出的异常

  • 不管是什么异常,都需要代码捕捉,不然程序会报错
# 计算器,当用户输入的不是+-*/会抛出异常,并捕捉这个异常
try:
    num1 = int(input("请输入整数:"))
    num2 = int(input("请输入整数:"))
    op1 = input("请输入+-*/")
    if op1 != "+" and op1 != "-" and op1 != "*" and op1 != "/":
        raise Exception("请输入正确的+-*/")
    if op1 == "+":
        print(num1 + num2)
    elif op1 == "-":
        print(num1 - num2)
    elif op1 == "*":
        print(num2 * num1)
    else:
        print(num1 / num2)
except Exception as result:
    print(result)

在这里插入图片描述

当一个函数返回一个布尔值作为条件放到if或者while后面的时候
if 函数名 == True 等价 if 函数名
如果函数返回True,表示条件成立
如果函数返回False,表示条件不成立

如果一个函数返回False,就执行if语句
if not 函数名:

模块(module)

  • 一个py文件就是一个模块
  • 一个项目是由多个py文件构成的,所以说一个项目是由多个模块组成
  • 模块名,也即是py文件名要符合变量名的命名规则
    • 一般习惯模块名用小写字母,如果有多个单词,单词之间用下划线分隔

import

  • 在一个py文件中使用另一个py文件中内容,需要先用import导入模块
  • 语法:
import 模块名
模块名.函数
# 在module2.py里面使用module1.py中定义的函数
import module1
print(module1.my_sum(3,4))

导入模块时给模块起别名(as)

  • 导入模块同时起别名
import 模块名 as 别名
别名.函数名
import module1 as m
print(m.my_sum(3,4))

from import导入指定内容

  • 从指定模块中导入指定的内容
  • import默认会把模块中所有内容导入,from import会有选择地导入内容
  • 语法一
from 模块名 import 函数名
调用函数的时候,不需要在前面接模块名,直接写函数名调用即可
  • module1.py
def my_sum(a,b):
    return a + b

def my_max(a,b):
    if a > b:
        return a
    else:
        return b
  • module3.py
# 只想导入module1中的my_max函数
from module1 import my_max
print(my_max(4,5))
  • 语法二
from 模块名 import *
导入所有内容,使用内容地时候,不需要写模块名

__name__属性

  • 每一个py文件都有一个属性__name__
  • 如果这个py文件是正在执行的模块,那么name属性的值为main
  • 如果这个py文件是被其他文件import导入调用的,那么name属性的值就是这个py文件的模块名
    • module4.py
def my_test():
    print(__name__)

my_test()      # 当前如果执行地就是module4这个模块,那么属性__name__地值为__main__

在这里插入图片描述

  • module5.py
import module4
module4.my_test()    #调用module4的my_test函数

在这里插入图片描述

包(package)

  • 包是一个包含多个模块的特殊目录
  • 目录下需要有一个特殊的文件__init__.py
  • 使用包的目的是一次性可以把一个目录下的所有模块通过一条import语句导入

创建包步骤演示

  • 第一步:在项目里建立一个目录my_pack
  • 第二步:在my_pack目录里创建两个py文件,a1.py,a2.py,内容如下
    a1.py:
def my_max(a,b):
    if a > b:
        return a
    else:
        return b

a2.py:

def my_sum(a,b):
    return a + b
  • 第三步:在py_back目录下创建__init__.py文件
    * __init__.py:
from . import a1
from . import a2
  • 第四步:在my_pack的上级目录建立一个module6.py文件,建立这个文件的目的是要使用my_pack包
    module6.py:
# module6要使用包my_pack
import my_pack
print(my_pack.a1.my_max(3,5))
print(my_pack.a2.my_sum(3,5))
  • 使用包中的函数
import 包名
包名.模块名.函数名

使用包注意的点

  • 不管目录下有多少模块,只有在__init__.py文件中通过import导入模块才能使用
  • __init__.py里面的from后面的“ . ”代表相对路径路径

导入包中指定函数

语法:

from.模块 import 函数
直接写函数名调用函数即可
from my_pack.a1 import my_max
from my_pack.a2 import my_sum
print(my_max(3,4))
print(my_sum(3,6))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值