博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 异常处理
阅读量:6083 次
发布时间:2019-06-20

本文共 1655 字,大约阅读时间需要 5 分钟。

异常的抛出机制

运行发生异常时,解释器首先会查找相应的处理语句(称为handle);

在当前函数中没找到,则会将异常传递给上层的调用函数;

如果在最外层(main)还是没有找到,解释器就会退出,并打印出记录,以便让用户找到问题产生的原因

 

 

异常处理语句

try:

  do

except:

  do

 

如一个文件没找到的异常:

try:

  open("abc.txt","r")               #以读‘r’的方式打开文件

except FileNotFoundError:           #文件没找到

  print("异常了!")

 

如变量没有找到的异常:

try:

  print(aa)               #打印出变量aa

except NameError:          #变量aa没有找到

  print("异常了!")

 

在Python中,所有的异常都继承Exception,所以可以使用它来接收所有类型的异常

try:

  do

except Exception:

  do

 

以上两个例子优化后如下:

 

一个文件没找到的异常:

try:

  open("abc.txt","r")               #以读‘r’的方式打开文件

except Exception:           #文件没找到

  print("异常了!")

 

变量没有找到的异常:

try:

  print(aa)               #打印出变量aa

except Exception:          #变量aa没有找到

  print("异常了!")

 

从Python2.5版本之后,所有的异常类都有了新的基类BaseException,Exception 同样也继承自BaseException,所以也可以使用BaseException来接收所有类型的异常

以上两个例子优化后如下:

 

try:

  open("abc.txt","r")               #以读‘r’的方式打开文件

  print(aa)               #打印出变量aa

except BaseException:          

  print("异常了!")

 

如何让Python告诉我们异常原因——使用msg

try:

  open("abc.txt","r")               #以读‘r’的方式打开文件

  print(aa)               #打印出变量aa

except BaseException as msg:  #msg变量接收异常信息        

  print(msg)      #打印出详细的异常信息

 

Python中常见的异常
异常 描述
BaseException 新的所有异常类的基类
Exception 所有异常类的基类,但继承BaseException类
AssertionError assert语句失败
FileNotFoundError 试图打开一个不存在的文件或目录
AttributeError 试图访问的对象没有属性
OSError 当系统函数返回一个系统相关的错误,包括I/O故障,如"找不到文件"或“磁盘已满”时,引发此异常
NameError 使用一个未赋值对象的变量
IndexError 当一个序列超出了范围
SyntaxError 当解析器遇到一个语法错误时引发
KeyboardInterrupt Ctrl+C被按下,程序被强行终止
TypeError 传入的对象类型与要求不符

 

更多异常用法:

try:

  aa="异常测试"

  print(aa)

except Exception as msg:

  print(msg)

else:

  print("没有异常")

 

###执行结果###

异常测试

没有异常

 

try:

  print(aa)

except Exception as e:

  print(e)

finally:

  print("不管是否有异常,我都会被执行")

 

抛出异常

raise Exception("语句")

raise 只能使用Python所提供的异常类,不能使用自定义的异常

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yishuiqinglian/p/6812416.html

你可能感兴趣的文章
[结题报告]11479 - Is this the easiest problem? Time limit: 1.000 seconds
查看>>
php中使用linux命令四大步骤
查看>>
neo4j安装与示例
查看>>
ExceptionLess新玩法 — 记日志
查看>>
RabbitMQ 集群
查看>>
启动jetty命令
查看>>
C#获取当前时间与同步时间
查看>>
端口被占用了,使用netstat找到占用端口的进程
查看>>
springboot的profile配置
查看>>
c++ 指针与 typedef
查看>>
委托-匿名方法-Lambda表达式
查看>>
MPF配置文件参数管理
查看>>
四则运算程序生成
查看>>
PIE SDK矢量数据的创建
查看>>
洛谷p1064 金明的预算方案
查看>>
10步让你成为更优秀的程序员
查看>>
杭电ACM 2013
查看>>
CF10E Greedy Change 判断硬币系统是否能用贪心策略
查看>>
坑人的开发——记一次私活的坑人经历
查看>>
sys用户无法远程登陆
查看>>