Python-异常

一、语法

try:
<语句>        #正常运行的代码
except <预知的异常类型>:
<语句>        #在try中产生异常后要执行的内容
else:
<语句>        #没有异常发生要执行的内容

二、作用

  • try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。 
  • 如果你不想在异常发生时结束你的程序,只需在except里捕获它。

三、使用except不带异常类型

try:
   正常的操作 
except :
   发生异常,执行这块代码 
else:
   如果没有异常执行这块代码
try:
    age = input("请输入你的年纪:")
    #age = int(input("请输入你的年纪:"))
    if age>=18:
        print("已成年")
    else:
        print("未成年")
except:    #这里不填异常的类型
    print("您的年龄类型为str,请重新考虑")
else:
    print("您可真年轻!!!")

四、使用except而带多种异常类型

  • as 变量名 输出异常信息
try:
   正常的操作 
except (异常1,异常类型2,...) as result:
   发生异常,执行这块代码 
else:
   如果没有异常执行这块代码
try:
    li=[1,2,3,4,5]
    print(li[5])
except (TypeError,IndexError,KeyError) as result:
    print("您的索引好像没有那么多,请重新考虑!",result)
else:
    print("您可真棒!!!")

五、try-finally语句:语句无论是否发生异常都将执行最后的代码

try:
<语句> 
finally:
<语句>
try:
    li=[22,66,33,44,99]
    i=int(input("请输入索引:"))
    print(li[i])
except (TypeError,IndexError,KeyError) as result:
    print("您的索引好像没有那么多,请重新考虑!",result)
else:
    print("您可真棒!!!")
finally:
    print("我永远都在❤")

注意:

  • 当在try块中抛出一个异常,立即执行finally块代码
  • finally块中的所有语句执行后,异常被再次触发,并执行except块代码

六、异常的传递:当前方法中的异常,在其他方法调用该方法时可进行捕获

def fun1():
    print("Welcome to my world again!")
    print(num)
    print("Welcome to you next time!")
def fun2():
    try:
        print("Welcome to my world!")
        fun1()
        print("i will always love you❤")
    except Exception as result:
        print("您的异常结果为:",result)
fun2()

七、触发异常:使用raise语句自己触发异常,可自己定义输出语句

def functionName(score):
    if score<0 or score>100:
        raise Exception("您的成绩不符合规则", score)
        # 触发异常后,后面的代码就不会再执行
    elif score>=0 and score<=60:
        print("您考的可真好!")
    else:
        print("继续努力!")
score=int(input("请输入成绩:"))
functionName(score)

八、用户自定义异常:通过创建一个新的异常类,用户可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式

#自定义一个异常的类,括号里为继承的父类
class ShortInputException(Exception):
    #init为初始化方法:1.类的实例化调用的方法 2.给参数赋值
    def __init__(self, length, atleast):
        #self.自定义变量 用来接收参数值 此时的self就代表类的实例化对象
        self.len = length
        self.atl = atleast
def main():
    try:
        s = input('请输入 --> ')
        if len(s) < 3:
            # raise触发一个自己定义的异常  类名():实例化对象
            raise ShortInputException(len(s), 3)
    except ShortInputException as result: #result就是报错信息
        print('ShortInputException: 输入的长度是%d,长度至少应是%d'% (result.len, result.atl))
    #此else为try的,不是if的
    else:
        print('没有异常发生')
main()

九、模块:Module,是一个Python文件,以.py 结尾,包含了Python对象定义和Python语句

1.使用Python自带的模块:import 模块名

2.使用自定义模块:一般创建于"包"下

①创建一个py结尾的文件,即为模块

②在模块中创建一些方法

③在其他py文件中导入模块中的方法,直接使用

④导入的语句:form 文件名 import 方法1,方法2...(或者直接写*,引用全部)

#在模块中定义方法
def test1():
    print("test1")

def test2():
    print("test2")

#在其他py文件中引用
#from practice_module import *
from practice_module import test1,test2
test1()
test2()

⑤扩展:使用__all__(两个下划线)。当被引入的包中有__all__=("方法名"),里面指定的方法才能被调用,调用的时候使用from 模块名 import *

#在模块中定义方法
#使用__all__
__all__=("test1","test3")
def test1():
    print("test1")

def test2():
    print("test2")

def test3():
    print("test3")

#在其他py文件中引用,引用不到test2()
from practice_module import *
test1()
test3()

十、包

1.定义:

  • 简单来说,包就是文件夹,但该文件夹下必须存在__init__.py 文件,该文件的内容可以为空。 
  • __init__.py 用于标识当前文件夹是一个包。

2.使用:模块一般就定义在包中

十一、Python常见模块

1.time模块:时间获取和转换

  • time.ctime( )时间的字符串
  • time.time( )返回当前时间的时间戳
  • time.sleep( )延时多少秒

2.math模块:包含计算正弦、余弦、正切、绝对值、余数、次方等的方法

3.os模块:对操作系统的一些操作,需要先导入才能使用

  • rename()可以完成对文件的重命名操作
  • remove()可以完成对文件的删除操作
  • mkdir()可以完成对文件的重命名操作
  • getcwd()可以获取当前目录

4.random模块:作用是返回随机数,只要跟随机元素相关的,都可以使用它。

5.string模块:主要用于对字符串进行操作

6.sys模块:提供了一系列有关python运行环境的变量和函数的模块

  • sys.argv函数实现从程序外部向程序传递参数
  • sys.platform函数用于获取当前系统平台

7.logging模块:是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志回滚等

  • 相比print具有以下优点:
  • 可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息
  • print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其他数据,logging则可以由开发者决定将信息输出到什么地方,怎么输出

8.hashlib加密模块:主要提供字符加密功能,将MD5和SHA模块整合到了一起

9.datetime模块:重新封装了time模块,提供更多接口

十二、Python常见的异常

1.NameError:尝试访问一个未声明的变量

#不定义变量name直接输出
print(name)

2.ZeroDivisionError:当除数为零的时候,即0为分母

num=6/0
print(num)

3.SyntaxError:唯一不在运行时发生的异常,它代表着Python代码中有一个不正确的结构,使得程序无法执行。这些错误一般是在编译时发生,解释器无法把脚本转换为字节代码。比如for循环不写冒号

  • Python的解释器就是Python.exe,是用来解释运行你编写的Python代码的,我们下载的Python其实自带解释器和编译器
  • 我们常用的编译器就是PyCharm

4.IndexError:当使用序列中不存在的索引时

li=[1,2,3,4,5]
print(li[5])

5.KeyError:当使用字典中不存在的键访问值时

dict={"name":"lyw","age":16}
print(dict["names"])

6.ValueError:传入无效的值,即使值的类型是正确的

#查询z的索引,然而z不存在
str="abcdefg"
print(str.index("z"))

7.IOError:输入/输出异常

  • 引发原因:
  • 主要是要打开的文件不存在
  • 文件写入时出现错误,主要可能的原因是以读的方式打开了文件,忘记关闭资源,直接在读的模式中进行了写的操作
  • 权限问题导致,没有对文件读和写的权限

8.FileNotFoundError:试图打开不存在的文件时。FileNotFoundError属于IOError的一种

#文件abc.txt不存在
fileRead=open("abc.txt","r")
print(fileRead.read())
fileRead.close()

9.AttributeError:当尝试访问未知的对象属性时

#Phone类不定义任何属性和方法
class Phone(object):
    pass

#创建实例,给实例添加color属性
#但是没有price属性,所以报错
phone=Phone()
phone.color="远峰蓝"
print(phone.color)
print(phone.price)

10.TypeError:期待的类型与实际的类型不一致

#input的是一个字符串类型
#判断的时候则是int类型
age=input("请输入你的年纪:")
if age>=18:
    print("已成年")
else:
    print("未成年")

11.ImportError:无法导入模块或者对象,主要是路径有误或名称错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭俞伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值