python第十四节(异常)

异常

异常捕获

ipt = input('请输入:')
num = int(ipt)  # ValueError:以10为基数的int()的无效文字:'fs'
print(num)
f1 = float(ipt)  # ValueError:无法将字符串转换为浮点数:'fs'

异常介绍:什么是异常
一般情况下,在python无法正常处理程序时就会发生一个异常。
所以异常是在程序执行过程中发生,并且会影响程序的执行
如果在python脚本发生异常时,我们不进行捕获处理该异常,程序则会终止。

prit('')  # NameError:没有定义名称“prit”
a = 2
print(a)

异常处理:捕获异常
try-except语句用来检测try代码块中的错误i,让except语句捕获异常欣喜并且进行处理。以至于在异常发生时不会终止我们的程序。
try:
正常程序时。执行代码块
except:
抛出异常时,捕捉异常,且自动执行该代码块

try:
    # 正常程序
    ipt = input('请输入:')
    num = int(ipt)  # ValueError:以10为基数的int()的无效文字:'fs'
    print(num)      # 以10为基数的int()无效的文字:'1.5'
except Exception as e:
    # 一旦有异常,执行except内部代码块
    print(e)
    num = 1
    print(num)

try:
    # li = [2,3]
    # li[2]  # IndexError 列表索引超出范围

    a = 2
    b = 0
    c = a/b
    print(c)  # ZeroDivisionError: division by zero 除以零
except IndexError as e:
    print(e)
except ZeroDivisionError as e:
    print(e)
except Exception as e:
    print(e)
else:
    print("如果没错,执行else代码")
finally:
    print("不管有无异常,都执行")

异常错误帮助
在这里插入图片描述
细分错误:捕获异常
try:
正常程序时,执行的代码块
except:
抛出异常时,捕获异常,且自动执行该代码块
else:
没有出错,则执行else
finally:
不管出不出错,肯定执行

try:
    # 正常程序
    ipt = input('请输入:')
    num = int(ipt)  # ValueError:以10为基数的int()的无效文字:'fs'
    print(num)      # 以10为基数的int()无效的文字:'1.5'
except Exception as e:
    # 一旦有异常,执行except内部代码块
    print(e)
    num = 1
    print(num)

try:
    # li = [2,3]
    # li[2]  # IndexError 列表索引超出范围

    a = 2
    b = 0
    c = a/b
    print(c)  # ZeroDivisionError: division by zero 除以零
except IndexError as e:
    print(e)
except ZeroDivisionError as e:
    print(e)
except Exception as e:
    print(e)
else:
    print("如果没错,执行else代码")
finally:
    print("不管有无异常,都执行")

触发异常:触发异常
raise Exception(异常参数)

'''
主动抛出异常  # 扣工资,炒老板鱿鱼
1.判断煎饼是否熟了没,烹饪时间<5,则抛出异常。否则熟了
'''
def test(time):
    if time<5:
        raise Exception("没熟..")
try:
    test(4)
except Exception as e:
    print(e)
else:
    print("顾客请吃")

def db():
    # 逻辑代码
    raise Exception("数据库的错误")

def demo():
    try:
        db()
    except Exception as e:
        print(e,'11111')  # e指的就是那写汉字

    try:
        li = [2,3]
        li[3]
    except Exception as e:
        print(e,'22222')
demo()

自定义异常
通过创建一个新的异常类,我们可以给根据自己的需求拟定异常规则,以及给该异常命名。但是注意,该自定义异常继承自Exception类

class OldAmyError(Exception):
    def __init__(self,msg):   # 将对象实例化
        self.msg_err =msg

    def __str__(self):
        return self.msg_err
# obj = OldAmyError("电脑错了...")
# print(obj)

try:
    raise OldAmyError("电脑错额..")  # 实例化类  e = OldAmyError
except OldAmyError as e:
    print(e)

断言:assert断言
assert断言用于判断一个表达式,当表达式条件为Flase时触发断言异常

'''
断言
用于强制用户服从,可捕获也可不捕获
'''
print('---1---')
assert  1==2  # AssertionError
print('---2---')

模块的导入

模块的导入
import module_name

from module_name import name1,name2…

from module_name import *

from module_name import func as demo_func
先建立demo1.py

import demo

def test1():
    print("demo1_test1")
def test2():
    print("demo1_test2")

再建立demo2.py并运行

# from demo1 import test1,test2
# test1()
# test2()

# from demo1 import *
# test1()
# test2()

from demo1 import test1 as d1
def test1():
    print("demo2_test1")

def test2():
    print("demo2_test2")

test1()
d1()

sys模块

内置模块:sys
sys模块是与python解释器交互模块

  • sys.argv[]是从程序外部获取参数的桥梁–>[]
  • 其中sys.argv[0]-->程序本身文件路径
    
  •  sys.argv[1]-->外部运行时传递的参数
    
  • sys.verson–>解释器版本信息
  • sys.path -->模块搜索路径
  • sys.exit()–>退出程序
    在这里插入图片描述
import sys
# print(sys.argv[])  # 类型<class 'list'>跳过的实际值

res = sys.argv[1]
# print(res)  #IndexError: list index out of range

if res == 'yes':
    print('i am ok')

print(sys.version)
print(sys.path)

print('111')
sys.exit()  #打断点
print('222')

os模块

内置模块:os模块
os模块是与操作系统相关的模块

  • os.getcwd()–>打印当前工作目录
  • os.chdir()–>改变当前工作目录
  • os.makedirs()–>以递归方式创建多个文件夹
  • os.removedirs()–>以递归方式删除多个空文件夹
  • os.mkdir()–>创建单个文件夹
  • os.rmdir()–>删除单个空文件夹
  • os.path.exists()–>判断该路径下的文件或文件夹是否存在
  • os.path.join()–>拼接路径
import os
# print(os.getcwd())  # 返回一个表示当前工作目录的unicode字符串
# os.chdir('C:')
# print(os.getcwd())

# os.makedirs('China\\Changsha')  # 存在,再创建则报错
# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'China\\Changsha'
# os.removedirs('China\\Changsha')  # 非空报错

# os.mkdir('China\\Changsha')
# os.rmdir('China\\Changsha')

# print(os.path.exists('China\\Changsha'))

# dirpath = 'Py\\doc'
# if not os.path.exists(dirpath):
#     os.makedirs(dirpath)

res = os.path.join(os.getcwd(),'demo5')
print(res)
发布了30 篇原创文章 · 获赞 0 · 访问量 691

猜你喜欢

转载自blog.csdn.net/luobofengl/article/details/104251340