python 【异常的捕获以及抛出】

今天来看看异常
1.简单的捕获异常语法
1>如果不确定某些代码是否能够正常执行,可以用try来捕获异常
2>捕获异常语法格式:

  try:
     尝试执行的代码
   except:
     出现错误的处理**

先看一个例子:

num = int(input('请输入一个整数:'))

我输入了一个a,结果为:

请输入一个整数:a
Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 2, in <module>
    num = int(input('请输入一个整数:'))
ValueError: invalid literal for int() with base 10: 'a'

报错了!

现在根据语法来捕获异常:

try:
    num = int(input('请输入一个整数:'))   #不确定能否被正确执行的代码
except:
    print('请输入正确的整数')     #错误的后处理代码

print('这句话用来看看出现错误以及不出现错误,这句话能不能被打印出来')

我先输入了一个正确的输入1,结果为:

请输入一个整数:1
这句话用来看看出现错误以及不出现错误,这句话能不能被打印出来

再输入了一个错误的输入a,结果为:

请输入一个整数:a
请输入正确的整数
这句话用来看看出现错误以及不出现错误,这句话能不能被打印出来

可以看到,当输入错误时,except部分的语句会被执行,而下面的语句不管是否错误都会被执行!

2.错误类型的捕获
1>代码在执行时,可能会遇到不同类型的异常,并作出不同的响应,这个时候,我们就需要捕获错误类型了
2>语法

 try:
   尝试执行的代码
except 错误类型1 :
   针对错误类型1,对应的代码处理
except 错误类型2 :
   针对错误类型2,对应的代码处理
......
except Exception as result :
   print(‘未知错误 %s’  %result)

先看一个例子:

#提示用户输入一个整数
num = int(input('请输入一个整数:'))
#使用10除以用户输入的整数并且输出
result = 10 / num
print(result)

我首先输入了一个0,得到结果为:

Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 13, in <module>
    result = 10 / num
ZeroDivisionError: division by zero

所以错误类型为:ZeroDivisionError 意思为0不能做除数!

再输入一个a,得到结果为:

Traceback (most recent call last):
  File "C:/Users/asus/Desktop/Python learning/exception/.idea/exception.py", line 11, in <module>
    num = int(input('请输入一个整数:'))
ValueError: invalid literal for int() with base 10: 'a'

所以错误类型为:ValueError

我们再来捕获错误类型:

try:
    #提示用户输入一个整数
    num = int(input('请输入一个整数:'))
    #使用10除以用户输入的整数并且输出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0错误')
except ValueError :
    print('请输入正确的整数')
    

这次再次输入一个0,得到结果为:

除0错误

输入一个a,得到结果为:

请输入正确的整数

3.捕获未知错误
在开发时,要预判到所有可能出现的错误是有一定难度的,如果希望程序无论出现任何错误,都不会因为python解释器抛出异常而被终止,可以再增加一个except
语法如下:

except Exception as result :
   print(‘未知错误 %s’  %result)

直接上代码:

try:
    #提示用户输入一个整数
    num = int(input('请输入一个整数:'))
    #使用10除以用户输入的整数并且输出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0错误')
`except Exception as result` :
    print('未知错误: %s' %result)
    

当我输入一个a时,结果为:

未知错误: invalid literal for int() with base 10: 'a'

所以当我们把能预料到的错误都写上之后,最好再加一个except Exception as result来预防出现未知错误!

4.异常捕获的完整语法

try:
   尝试执行的代码
except 错误类型1 :
   针对错误类型1,对应的代码处理
.......
except 错误类型N :
   针对错误类型N,对应的代码处理
except Exception as result :
   #打印错误信息
   print(result)
else :
   没有异常才会执行的代码
finally:
   无论是否有异常,都会执行的代码

上代码:

try:
 #提示用户输入一个整数
    num = int(input('请输入一个整数:'))
    #使用10除以用户输入的整数并且输出
    result = 10 / num
    print(result)
except ZeroDivisionError :
    print('除0错误')
except Exception as result :
    print('未知错误 %s' %result)
else:
    print('当try语句成功时执行else的语句!')
finally:
    print('无论是否出现错误都会执行的语句!')

print('该语句用于检验以上语句执行完后是否能继续执行后面的语句')

当输入1时,出现的结果为:

10.0
当try语句成功时执行else的语句!
无论是否出现错误都会执行的语句!
该语句用于检验以上语句执行完后是否能继续执行后面的语句

当输入0时,出现的结果为:

请输入一个整数:0
除0错误
无论是否出现错误都会执行的语句!
该语句用于检验以上语句执行完后是否能继续执行后面的语句

当输入a时,出现的结果为:

未知错误: invalid literal for int() with base 10: 'a'
无论是否出现错误都会执行的语句!
该语句用于检验以上语句执行完后是否能继续执行后面的语句

5.抛出raise异常
在这里插入图片描述抛出异常:在Python中提供了一个Exception的异常类,在开发中,如果为了满足业务异常,希望抛出异常,可以:
1.创建一个Exception的对象
2.使用raise关键字抛出异常对象

例子:
在这里插入图片描述
上代码:

def input_password():
    # 1. 提示用户输入密码
    password = input('请输入密码:')
    # 2. 判断密码长度 >=8, 返回输入的密码
    if len(password) >= 8 :
        return  password
    # 3. 如果 < 8 主动抛出异常
    print('主动抛出异常')
    # 1> 创建异常对象 - 可以使用错误信息字符串作为参数
    exception = Exception('密码长度不够')
    # 2> 主动抛出异常
    raise exception
#既然抛出了异常,我们就可以捕获异常
try:
   print(input_password())
except Exception as result :
    print(result)

输入了a,得到的结果是:

主动抛出异常
密码长度不够

输入了12345678,得到的结果是:

12345678

好了,Python的异常就说到这里!

发布了29 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43403025/article/details/100171582
今日推荐