异常的使用场景 | 学习笔记

简介: 快速学习 异常的使用场景

开发者学堂课程【Python入门 2020年版异常的使用场景】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10409


异常的使用场景


内容介绍:

一、except 语句处理异常

二、异常的使用场景


一、except 语句处理异常

try. ..except 语句处理程序运行过程中的异常,异常出现如下:

file = open(‘ddd.txt')

#打开一个文件用来后面读取这个文件,实际上不存在文件“ddd.txt”。

print(file.read())

file.close()

#打开一个文件用来读文件,运行结果会提示异常,此时就不会继续往下读。运行会提示在第一行就已经出错。

如果程序不在第一行出错的地方崩了,它接着往下走了,读东西的文件都不存在读不出数据的。

报错的目的就是已经出现问题,系统会崩了,避免再出更多的问题,必须要解决问题,否则后边的代码没办法运行。这就是异常机制,必须要解决问题,否则程序无法继续运行,避免程序的一错再错。

1.解决方法一:

try:

file = open( " ddd.txt")

print(file.read())

file.close()

except Exception as e:

#给异常起了一个变量名 e

print(e)

#运行这段代码,控制台会打印错误提示:

[ Errno 2] No such file or directory: 'ddd.txt’。其中 Exception 是一个父类。

2.解决方法二:

try:

file = open( " ddd.txt")

print(file.read())

file.close()

except:

print('出错了!!!')

#也可以不写 except Exception as e,直接 except,控制台会直接打印出错了!!!

3.解决方法三:

try:

print(1 / 2)

file = open( ' ddd.txt ')

print(file.read())

file.close()

except (FileNotFoundError) as e:

#表示处理指定类型的异常

print(e)

#运行这段代码,控制台会打印错误提示:[ Errno 2] No such file or directory: 'ddd.txt’

如果将第二行代码改为1/0,系统会直接崩掉,不会向下运行。1/0是除此之外的另一种错误,但是由于此处处理的是指定类型的异常,所以程序捕捉不到1/0类型的错误

可以将1/0类型的错误捕捉加进去:except (FileNotFoundErrorZeroDivisionError) as e,程序就会继续运行。

try:

person ={' name ' : 'zhangsan'}

print(person['age'])

print(1 / 2)

file = open( ' ddd.txt ')

print(file.read())

file.close()

except (FileNotFoundError) as e:

print(e)

#运行程序后,程序会崩掉。如果用中括号捕捉数据内容,而这个内容不存在,则程序会出现问题。因为程序捕捉不到keyerror 类型的错误。

可以将该类型的错误捕捉加进去:except (FileNotFoundErrorZeroDivisionError,KeyError) as e,程序就会继续运行。

处理多个语句错误时可以不用这么麻烦,直接使用父类 Exception

其中 FileNotFoundError 继承 OSErrorOSError 继承 WindowsError, WindowsError 继承自 Exception

ZeroDivisionError 继承 ArithmeticError(算法的错误),ArithmeticError 也继承 ExceptionKeyError 继承自LookupErrorLookupError 继承自 Exception

无论那个错误都继承自 Exception,所以可以直接用父类 Exception 代替处理指定类型的异常。


二、异常的使用场景

age = input('请输入您的年龄: ')

#input 接收到的用户输入是一个字符串

if int(age) > 18:

print( '欢迎来到我的网站’)

#这串代码会存在一个问题,不能控制输入的类型,如果输入的为数字之外的数据,如“kjhf”程序就会报错,控制台提示 ValueError: invalid literal for int() with base 10: ‘kjhk '

解决方法:

1.初次修改

age = input("请输入您的年龄:")

if age.isdigit():

#判断输入的年龄是否是数字

age = int(age)

if age > 18:

print( '欢迎来到我的网站")

else:

print(未满18,请自动离开')

else:

print('输入的不是数字)

#运行程序后就只能输入数字,但是当年龄不是整数的时候,也会判断该输入不是数字。

2.再次修改

age = input("请输入您的年龄:")

try:

age = float(age)

except valueError as e:

print( '输入的不是数字')

#先把输入的年龄数字转换为小数,判断是否是数字。

else:

if age > 18:

print( '欢迎来到我的网站")

else:

print('未满18,请自动离开')

#当你很多时候判断不了语句的正确性时,就可以使用判断语句。除 except 外下周会讲正则表达式\d+(.?\d+)? \d(数字)+(出现一次或多次) .?( 出现0次或一次)。

没有正则表达式的话,你来判断这个字符串它输入的内容是否是一个合法的数字,你其实是没有办法判断的。

相关文章
|
Java 程序员 C语言
62 C++ - 异常基本概念
62 C++ - 异常基本概念
69 0
|
2月前
利用 printStackTrace()方法定位异常的深入探讨
【10月更文挑战第13天】利用 printStackTrace()方法定位异常的深入探讨
207 58
|
4月前
|
算法 安全 Java
深入解析Java多线程:源码级别的分析与实践
深入解析Java多线程:源码级别的分析与实践
|
7月前
|
SQL 缓存 安全
【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]
【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]
62 2
|
6月前
|
Java 程序员 索引
JavaSE——异常(1/2)-认识异常(介绍,异常的体系,了解如何解决异常)、自定义异常(自定义异常的种类,实例演示)
JavaSE——异常(1/2)-认识异常(介绍,异常的体系,了解如何解决异常)、自定义异常(自定义异常的种类,实例演示)
39 0
|
存储 安全 Java
TheadLocal的使用场景和注意事项
TheadLocal的使用场景和注意事项
114 0
|
7月前
|
Android开发 开发者 Kotlin
FragmentFactory :功能详解&使用场景
FragmentFactory :功能详解&使用场景
169 0
|
7月前
|
缓存 Java 程序员
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
|
数据采集 Java
Java线程池使用场景和方法分析
Java线程池使用场景和方法分析
93 0
|
开发框架 PHP
PHPfinal方法的使用场景是什么?底层原理是什么?
PHPfinal方法的使用场景是什么?底层原理是什么?
104 0