0
点赞
收藏
分享

微信扫一扫

Python-异常

唯米天空 2022-04-14 阅读 142

一、语法

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

二、作用

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

三、使用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,...):
   发生异常,执行这块代码 
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-异常和模板

07. Python-异常

Python-字典

python-报错

Python-类

Python-继承

python-元组

0 条评论