在python中,至少有两类错误,一种是程序语法错误,一种是程序异常。

所谓的语法错误是指你未按规定格式书写导致的错误,如:定义函数时,括号后面要紧跟英文冒号,若缺失则不能识别与运行,并抛出 SyntaxError: invalid syntax错误

def exceptions()
print("语法错误") "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
File "D:/demo/except_try.py", line 1
def exceptions()
^
SyntaxError: invalid syntax Process finished with exit code 1

而异常是指程序代码书写符合编码规范,并能够正常运行,但在运行时遇到错误并抛出,如:让两种不同类型进行运算,会抛出 TypeError

def add(x, y):
"""
字符拼接
:return:
"""
str1 = x + y
return str1 print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
Traceback (most recent call last):
File "D:/demo/except_try.py", line 13, in <module>
print(add(1, '3'))
File "D:/demo/except_try.py", line 10, in add
str1 = x + y
TypeError: unsupported operand type(s) for +: 'int' and 'str' Process finished with exit code 1

python中的异常

请参考文档 https://docs.python.org/3/library/exceptions.html#bltin-exceptions

python中的异常捕获及处理

程序运行出错后将不再执行,若想程序忽略错误继续执行,则要进行异常的捕获处理操作,在python中用try ----- except语句进行异常的捕获处理

# try --- except 语法
try:
代码1
代码2
except <异常>:
代码1
代码2

作用解析:当try下面的代码发生异常时会进行匹配except 中的异常,若匹配上则执行except下面的语句,异常则处理完成;若未匹配上则程序终止并打印默认异常信息

     当try下面的代码未发生异常时,不会匹配错误,程序正常往下执行。

用try --- except处理上个异常例子

1.捕获异常后不做任何处理

def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
except TypeError:
pass print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
None Process finished with exit code 0

2.将捕获的异常打印处理

def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
except TypeError as e:
print('程序发生异常:%s' % e) print(add(1, '3')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
程序发生异常:unsupported operand type(s) for +: 'int' and 'str'
None Process finished with exit code 0

3.有时可以预估会发生的错误类型,有时又会出现莫名奇妙的未在考虑范围类的错误,这时可以用捕获所有异常来处理(直接使用常见错误的基类Exception或不带任何异常)

def add(x, y):
"""
字符拼接
:return:
"""
try:
str1 = x + y
return str1
# except常见错误的基类Exception
except Exception as e:
print('程序发生某个不知道的异常:%s' % e) def zero(x, y):
"""
除法
:param x:
:param y:
:return:
"""
try:
return x/y
# except不带任何异常
except:
print("发生错误") print(add(1, '3'))
print(zero(1, 0)) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
程序发生某个不知道的异常:unsupported operand type(s) for +: 'int' and 'str'
None
发生错误
None Process finished with exit code 0

4.except后面带多个异常,只要发生了其中一个异常,则进行处理

def zero(x, y):
"""
除法
:param x:
:param y:
:return:
"""
try:
return x/y
# except带多个异常
except (TypeError, ValueError, ZeroDivisionError) as e:
print("发生异常%s:" % e) print(zero(1, 0)) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
发生异常division by zero:
None Process finished with exit code 0

5.使用多个except (如果多个 except 声明的异常类型都与实际相匹配,最先匹配到的 except 会被执行,其他则被忽略)

try:
a = 1/0 + data[2] print(a)
except TypeError as e:
print(e)
except NameError as e:
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e:
print(e) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
division by zero Process finished with exit code 0

注意:当使用多个except时,最后一个最好能捕获全部异常(except Exception)

try-----except -----else语句

try:
语句
except (异常):
语句
else:
语句

解析:当try中发生异常时,进行匹配except错误,匹配上后执行except下的语句,且程序不会终止,若未匹配上程序终止并抛出异常

当try中未发生异常时,则运行else下的语句

try:
a = 3
except ZeroDivisionError:
pass
else:
print("I like %s" % a) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
I like 3 Process finished with exit code 0

try----except ----finally语句

try:
语句
except (异常):
  语句
finally:
语句

解析:不管try中有没有发生异常最后都会执行finally下面的语句,且不受return语句影响

# 无异常演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
print("文件不存在:%s" % e)
except OSError as e:
print("OS错误{}".format(e))
except Exception as e:
print("未知错误:%s" % e)
finally:
print("正在关闭文件")
f.close()
open_file('D:/demo/except_try.py') "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
正在关闭文件 Process finished with exit code 0
# 异常演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
print("文件不存在:%s" % e)
except OSError as e:
print("OS错误{}".format(e))
except Exception as e:
print("未知错误:%s" % e)
finally:
print("正在关闭文件")
f.close()
open_file('D:/demo/try.py') "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
文件不存在:[Errno 2] No such file or directory: 'D:/demo/try.py'
正在关闭文件
Traceback (most recent call last):
File "D:/demo/except_try.py", line 59, in <module>
open_file('D:/demo/try.py')
File "D:/demo/except_try.py", line 58, in open_file
f.close()
UnboundLocalError: local variable 'f' referenced before assignment Process finished with exit code 1
# 含return语句演示
def open_file(file):
try:
f = open(file, 'r')
except FileNotFoundError as e:
return "文件不存在:%s" % e
except OSError as e:
return "OS错误{}".format(e)
except Exception as e:
return "未知错误:%s" % e
finally:
print("正在关闭文件")
f.close()
print(open_file('423')) "D:\Program Files\Python\Python37-32\python.exe" D:/demo/except_try.py
Traceback (most recent call last):
File "D:/demo/except_try.py", line 59, in <module>
print(open_file('423'))
File "D:/demo/except_try.py", line 58, in open_file
正在关闭文件
f.close()
UnboundLocalError: local variable 'f' referenced before assignment

python 之异常捕获及处理(try--except)的更多相关文章

  1. python异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-3

    异常捕获 异常:程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表现出来 影响:整个程序无法再正常运行 异常的结构 异常的类型 NameError 异常的信息 ...

  2. 【python】-- try except (异常捕获)、断言

    try except (异常捕获) 当程序出错了,但是我们又不想让用户看到这个错误,而且我在写程序的时候已经预料到了它可以出现这样的错误,出现这样的错误代表着什么,我们可以提前捕获这些个错误 1.异常 ...

  3. Python档案袋(异常与异常捕获 )

    无异常捕获 程序遇到异常会中断 print( xxx ) print("---- 完 -----") 得到结果为: 有异常捕获 程序遇到异常会进入异常处理,并继续执行下面程序 tr ...

  4. python入门19 异常及异常处理 异常捕获

    常见异常举例 """ 一些异常举例:""" '''模块不存在 ModuleNotFoundError: No module named 'd ...

  5. python 的异常及其处理

    Python 异常处理 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言 ...

  6. Python中异常(Exception)的总结

    Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...

  7. Selenium基本使用(十一)异常捕获

    1. 抛出异常和自定义异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种 ...

  8. 02 flask 请求钩子、异常捕获、上下文、Flask-Script 扩展、jinja2 模板引擎、csrf防范

    一 请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个 ...

  9. Python标准异常和异常处理详解

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 1.异常处理: 本站Python教程会具体介绍. 2.断言(Asserti ...

  10. Javascript的异常捕获机制

    這個異常處理機制,之前也只是,但是沒有怎麼用過,用了一次后發現還可以, 和java,python的異常處理機制也很相似 Javascript的异常捕获机制 1.1 基本的try…catch语句 ES3 ...

随机推荐

  1. 【设计模式】Java设计模式 - 命令模式

    Java设计模式 - 命令模式 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目录 Ja ...

  2. @Transactional注解真的有必要声明rollbackFor属性吗?

    @Transactional注解真的有必要声明rollbackFor属性吗? ​ 今天在看spring的事务底层源码时,想到一个问题,@Transactional注解真的有必要声明rollbackFo ...

  3. 分布式存储系统之Ceph集群启用Dashboard及使用Prometheus监控Ceph

    前文我们了解了Ceph之上的RadosGW基础使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16768998.html:今天我们来聊一聊Ceph启 ...

  4. 10.MongoDB系列之副本集组成

    1. 同步 复制是指多台服务器保持相同的数据副本.MongoDB通过保存操作日志(oplog)实现复制功能. oplog存在于主节点local数据库中的一个固定集合,包含了主节点执行的每一次写操作. ...

  5. 通过 Github Action 实现定时推送天气预报

    偶然间,看到 GitHub Actions 教程:定时发送天气邮件 - 阮一峰的网络日志 这篇文章,没错,这个正好能打发自己的折腾之心,也能通过代码给生活引入一些变化. 还是在这里简单记录一下实现过程 ...

  6. 在mybatis中#{}和${}的区别

    文章目录 1.第一个#{} 2.第二个${} 3.区别 1.第一个#{} 解释: 使用#{}格式的语法在mybatis中使用preparement语句来安全的设置值 PreparedStatement ...

  7. Linux 文件操作接口

    目录 Linux 文件操作接口 C语言文件操作接口 C语言文件描述 fopen() r模式打开文件 w模式打开文件 a模式打开文件 其他模式类似 fclose() fwrite() fread() 系 ...

  8. 16.-admin管理后台

    一.admin管理后台 Django提供给了比较完善的后台管理数据库接口,可供开发过程中调用和测试使用 Django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发者使用   命令:py ...

  9. C# Static关键词的使用

    一.C#中类的方法分为静态方法和非静态方法 静态方法有Static关键词修饰 静态方法归类所有,而非静态方法归类的实例所有:静态方法无需类去实例化可直接调用 静态成员属于类所有,为各个类的实例所公用, ...

  10. C#中进行数值的比较

    Equals的使用 str1.Equals(str2,StringComparison.OrdinalIgnoreCase);     ----比较str1和str2       StringComp ...