python学习之异常处理

异常

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。
每当发生让Python不知所措的错误时,它都会创建一个异常对象。
如果你编写了处理该异常的代码,程序将继续运行;
如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

异常是使用try-except代码块实现的。出现异常
要么运行你编写的异常如何解决的代码,要么运行系统自带的错误提示,traceback

处理ZeroDivisionError 异常


# 代码所有:cxw
# 开发时间:2021/11/11 18:46

'''print(5/0)'''
#ZeroDivisionError: division by zero ZeroDivisionError是一个异常对象
#python无法按照你的要求做时,将会创建这种对象,python会停止运行

#使用try-expect 解决异常

try:
    print(5/0)
except ZeroDivisionError:
    print("无法运算,错误")
    #这是解决异常给出的代码块,能让程序正常运行,不会报错

'''如果try中的代码块运行无错误,python将会运行try中的代码,
如果try中异常,将会运行except中的代码,不会显示异常'''

使用异常避免崩溃

异常捕获一般用于需要用户输入数据时,因为用户输入的数据还有可能并不能够正确的被程序处理
提示用户提供有效输入,不至于崩溃

# 代码所有:cxw
# 开发时间:2021/11/11 18:58

#只执行除法运算的简单计算器
'''print("请输入两个数,将会将他们两个相除,quit结束\n")
while True:
    first_num=input("请输入第一个数:\n")
    if first_num=="q":
        break
    secend_num=input("请输入第二个数:\n")
    if secend_num=="q":
        break
    answer=int(first_num)/int(secend_num)
    print(answer)'''
#正常大于零的数将会正常运行,但是如果5/0将会报错,崩溃,这个时候就需要使用try-except异常处理

#解决异常
try:
    print("请输入两个数,将会将他们两个相除,quit结束\n")
    while True:
        first_num = input("请输入第一个数:\n")
        if first_num == "q":
            break
        secend_num = input("请输入第二个数:\n")
        if secend_num == "q":
            break
        answer = int(first_num) / int(secend_num)
        print(answer)
except ZeroDivisionError:
    print("请输入正确的除数和被除数,警告!")

else 代码块

将可能引发错误的代码放在try-except中

# 代码所有:cxw
# 开发时间:2021/11/11 18:58

#只执行除法运算的简单计算器
'''print("请输入两个数,将会将他们两个相除,quit结束\n")
while True:
    first_num=input("请输入第一个数:\n")
    if first_num=="q":
        break
    secend_num=input("请输入第二个数:\n")
    if secend_num=="q":
        break
    answer=int(first_num)/int(secend_num)
    print(answer)'''
#正常大于零的数将会正常运行,但是如果5/0将会报错,崩溃,这个时候就需要使用try-except异常处理

#解决异常

print("请输入两个数,将会将他们两个相除,quit结束\n")
while True:
    first_num=input("请输入第一个数:\n")
    if first_num=="q":
        break
    secend_num=input("请输入第二个数:\n")
    if secend_num=="q":
        break
    try:
        answer = int(first_num) / int(secend_num)
    except ZeroDivisionError:
        print("错误,请输入正确的除数和被除数,警告!\n")
    else:
        print(answer)

'''假如try中的代码出错,执行except中的代码,没有问题时,执行else语句'''

#try-except-else
'''
try:
工程
except:
错误时的方法
else:
正确时的方法
'''

处理FileNotFoundError异常


# 代码所有:cxw
# 开发时间:2021/11/11 19:22

#FileNotFoundError 异常,找不文件,不存在的文件,解决异常时需要将try语句放在open()语句之前
'''filename="alice.txt"
with open(filename) as files:
    contests=files.read()
    print(contests)
'''

#解决FileNotFoundError异常
filename="alice.txt"
try:
    with open(filename) as files:
        contests = files.read()
except FileNotFoundError:
    print("文件找不到")
else:
    print(contests)

分析文本

# 代码所有:cxw
# 开发时间:2021/11/11 20:29

#分析文本
title="Alice in WonderLand"
A=title.split()
#split()以空格为分隔符将字符串串分拆为对各部分,字符串的劈分,并将这些部分储存在一个列表中。
#str.split(str="",num=string.count(str))[n]
#str= 表示分隔符,默认为空格,但是不能为空,num表示分割次数
print(title)
print(A)

'''如果要分析文本单词的个数,可以调用split(),让文本中的字符串分拆为多个部分,储存到列表中'''

使用多个文件

# 代码所有:cxw
# 开发时间:2021/11/11 20:41

#编写函数使用多个文件
def count_name(filenme):  #形参,filename 
    try:
        with open(filename) as files:
            counts=files.read()
    except FileExistsError:
        print("文件找不到,警告")
    else:
        s=counts.split()
        num_words=len(s)
        print("the ",filenme," have ",num_words)
filename="alin.txt"
count_name(filename)

#outcome
'''the  alin.txt  have  3'''

在不知道写啥时可以pass语句

面对异常时也可以这样,遇见异常就可以pass,这样程序就可以跳过异常,正常运行
不知道写啥时也可pass
可以用来构建程序的框架

实例1

# 代码所有:cxw
# 开发时间:2021/11/11 21:15

#加法运算
'''
10-6 加法运算:提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。
在这种情况下,当你尝试将输入转换为整数时,将引发ValueError异常。
编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。
在用户输入的任何一个值不是数字时都捕获ValueError异常,并打印一条友好的错误消息。
对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。
'''

#如果输入的不是数字,会出现ValueError
# try:
#     while True:
#         n1=int(input("n1\n"))
#         if n1==6:
#             break
#         n2=int(input("n2]\n"))
#         answer=n1+n2
# except ValueError:
#     print("输入数字,谢谢")
# else:
#     print(answer)

# try:
#     x = input("Give me a number: ")
#     x = int(x)
#
#     y = input("Give me another number: ")
#     y = int(y)
#
# except ValueError:
#     print("Sorry, I really needed a number.")
#
# else:
#     sum = x + y
#     print("The sum of " + str(x) + " and " + str(y) + " is " + str(sum) + ".")


print("请输入两个数相加")
while True:
    try:
        first_num=input("请输入第一个数:")
        if first_num=="q":
            break
        first_num=int(first_num)
        second_num=input("请输入第二个数:")
        if second_num=="q":
            break
        second_num=int(second_num)
    except ValueError:
        print("请输入数字,谢谢!")
    else:
        answer=first_num+second_num
        print(answer)

实例2

# 代码所有:cxw
# 开发时间:2021/11/11 21:50

def read_openfile(filename):
    try:
        with open(filename) as files:
            contens=files.read()
    except FileNotFoundError:
        print("文件未找到,请核实文件正确位置")
        #
    else:
        print(contens)
filename="test_file/cat.txt"
read_openfile(filename)
filename="nam.txt"  #文件不存在,使用except后的代码
read_openfile(filename)

#outcome
'''
miaomiao heihei tuitui jiejie
文件未找到,请核实文件正确位置
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值