一、什么是异常

"""
异常:错误,bug
处理异常:尝试执行某句可能出现异常的语句,
若出错则用正确的代码去替代。 try:
可能发生错误的代码
except:
如果出现异常执行的代码
""" def t1():
try:
f = open('test.txt', 'r')
except:
f = open('test.txt', 'w') def t2():
try:
b.bar()
except:
class Car(object):
def bar(self):
print("刹车") b = Car()
b.bar() if __name__ == '__main__':
t2()

二、异常类型

(1)"""
1.捕获指定异常,异常类型有多种
2.若尝试执行的代码异常类型与捕获的异常类型不同则报错
3.try下方一般只放一行代码,若有多行可能异常代码,
则捕获一个异常类型后函数返回,及只能捕获一个异常类型。
4.捕获多个指定异常
5.捕获所有异常,Exception 是所有程序异常类的父类
"""

def t3():
"""
捕获多个指定异常
捕获异常描述信息
"""
try:
print(num)
except (NameError, ZeroDivisionError) as result:
print(result)
# name 'num' is not defined def t4():
try:
print(num)
except Exception as result:
print(result) if __name__ == '__main__':
# t1()
# t2()
# t3()
t4()

(2)

"""
else:没有异常时执行的代码
finally: 无论是否异常都执行的代码,例如:关闭文件
"""

def t1():
try:
print(1)
except Exception as r:
print(r)
else:
print('我是else,当无异常时执行的代码') def t2():
try:
f = open('text.txt', 'r')
except Exception as r:
print(r)
f = open('text.txt', 'w')
else:
print('没有异常!')
finally:
print('关闭文件')
f.close() if __name__ == '__main__':
# t1()
t2()

三、异常传递

"""
异常传递(Exception passing):
异常时可以嵌套书写的,由外到内 案例1:1.尝试只读打开test.txt 文件,有内容存在则读取,无则提示用户
2.循环读取,无内容时退出循环,若文件意外终止,则提示用户
"""
import time try:
f = open('text.txt')
try:
while True:
content = f.readline()
if len(content) == 0:
break
time.sleep(2)
print(content)
except:
# 在命令提示符中按 ctrl + c ,进行测试
print('意外终止读取数据')
finally:
f.close()
print('关闭文件')
except:
print('文件不存在')

四、自定义异常

"""
自定义异常(Custom exception)
用来报错,不合逻辑的错
案例1:密码长度不足,则报错。
1.自定义异常
2.用 raise 异常类对象,来抛出异常的描述信息
3.捕获异常
""" class ShortInputError(Exception):
"""
自定义异常类,继承Exception
"""
def __init__(self, length, min_len):
self.length = length
self.min_len = min_len def __str__(self):
"""
设置抛出异常的描述信息
"""
return f'您输入的密码长度是{self.length},' \
f'不能小于最小长度 {self.min_len}' def main1():
try:
code = input('请输入密码:\n')
if len(code) < 3:
# 抛出异常类创建对象
raise ShortInputError(len(code), 3)
except Exception as r:
# 捕获该异常
print(r)
else:
print('密码已输入完成') if __name__ == '__main__':
main1()

Python——捕获异常的更多相关文章

  1. Python捕获异常

    一.常见异常 1.语法错误:SyntaxError:invalid syntax (1)案例: (1)解决方法: ①查看代码有没有红色波浪线 ②熟悉python基本语法 2.变量名不存在:NameEr ...

  2. python捕获异常及方法总结

    调试Python程序时,经常会报出一些异常,异常的原因一方面可能是写程序时由于疏忽或者考虑不全造成了错误,这时就需要根据异常Traceback到出错点,进行分析改正:另一方面,有些异常是不可避免的,但 ...

  3. python捕获异常、处理异常

    https://blog.csdn.net/jmilk/article/details/50047457

  4. 网上都没有提到的教程:python捕获异常后,怎么输出错误文件和行号

    1.假设输出不存在的变量 a try: print(a) except NameError as e: print('发生错误的文件:', e.__traceback__.tb_frame.f_glo ...

  5. python 捕获异常顺序

    catch 异常的时候,有关的异常(若是抛出子类异常,则父类异常的except也算.反之不算)except的语句是按代码顺序执行, 也就是说,当一个异常发生时,从若干except中若遇见异常类基类,父 ...

  6. python 捕获异常详细信息

    import os import sys import traceback BasePath = os.path.dirname(os.getcwd()) sys.path.append(BasePa ...

  7. python 捕获异常

  8. python的运维交流学习笔记

    #!/usr/bin/env | #!/usr/bin/python#coding:gbk #python 运维练习 #需求: #1.利用python实现自动监控服务器性能 #2.并将监控到的数据进行 ...

  9. 用Python爬E站本

    用Python爬E站本 一.前言 参考并改进自 OverJerry 大佬的 教你怎么用Python爬取E站的本子_OverJerry. 本文为技术学习记录,不提供访问无存在网站的任何方法,也不包含不和 ...

随机推荐

  1. TCP/IP、TCP、UDP、Socket知识汇总

    带你了解TCP/IP,UDP,Socket之间关系 https://blog.csdn.net/chaoshenzhaoxichao/article/details/79785318 主要知识点: T ...

  2. 认识Class -- 终于不在怂

    引子     本是新年,怎奈新冠肆掠,路上行人,男女老少几乎是全副口罩,形色匆匆:偶尔有一两个裸露口鼻的,估计都是没囤到口罩的,这几天药店几乎都是贴上大字:口罩没货.看着网络上病毒消息满天飞,我也响应 ...

  3. 关于不同python版本print不一致的简单解决方案

    经常遇到python2.x的print不带括弧,但python3.x必须要带括弧,版本不一致,需要修改,但是面对数以十计的重复劳动,不免望而却步.其他的一些不一样的地方同理. 解决方案: 运用正则化替 ...

  4. 工作流Activity框架入门(一)

    Activity工作流入门 1. 工作流概念 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某 ...

  5. python学习Day02

    [主要内容] 1. 循环. while循环 while 条件: 代码块(循环体) 执行流程: 1. 判断条件是否为真. 如果真. 执行代码块 2. 再次判断条件是否为真...... 3. 当条件为假. ...

  6. ORACLE ITL事务槽

    讲到ITL(事务槽)必定先说数据块,那么什么是数据块呢?先给大家上一个数据块结构图 数据块分别由块头.ITL(事务槽).表信息区.行信息区.块空闲区.行数据区组成,其中ITL用来记录在数据块发生的所有 ...

  7. 再谈typedef(重点为函数指针)

    有种很方便的写法. typedef int *p: p pointer: 这时直接把pointer带入原式中,取代p然后去掉typedef,得到的结果就是int * pointer: 哈哈,这样直接替 ...

  8. Codeforces_831

    A.线性判断. #include<bits/stdc++.h> using namespace std; ] = {}; int main() { ios::sync_with_stdio ...

  9. HDU_1556_线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=1556 直接用了技巧来做. #include<iostream> #include<cstdio ...

  10. TensorFlow中使用GPU

    TensorFlow默认会占用设备上所有的GPU以及每个GPU的所有显存:如果指定了某块GPU,也会默认一次性占用该GPU的所有显存.可以通过以下方式解决: 1 Python代码中设置环境变量,指定G ...