首页 > 编程语言 >21.python异常处理和断言

21.python异常处理和断言

时间:2023-10-19 09:34:53浏览次数:29  
标签:assert Exception 21 错误 python +-- try 异常 断言

python异常处理和断言

目录

异常捕获流程

捕捉异常可以使用try/except语句。

try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

try:
	<语句>        # 运行别的代码
except <名字>:
	<语句>        # 如果在try部份引发了'name'异常
except <名字>,<数据>:
	<语句>        # 如果引发了'name'异常,获得附加的数据
else:
	<语句>        # 如果没有异常发生
finally:
	<语句>    	# 无论是否发生异常,退出try时总会执行

案例

#!/usr/bin/python
# -*- coding: UTF-8 -*-

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print ("Error: 没有找到文件或读取文件失败")
else:
    print "内容写入文件成功"
    fh.close()

触发异常

使用raise语句自己触发异常

1.创建一个Exception的对象

2.使用raise关键字抛出异常对象(语法:raise 异常对象)

def functionName( level ):
    if level < 1:
        raise Exception("Invalid level!", level)
        # 触发异常后,后面的代码就不会再执行
def input_password():

    # 1.提示用户输入密码
    pwd = input("请输入密码:")

    # 2. 判断密码长度 >=8 ,返回用户输入的密码
    if len(pwd) >= 8:
        return pwd

    # 3. 如果<8,主动抛出异常
    print("主动抛出异常")
    # > 1.创建一个Exception的对象,可以使用错误信息字符串作为参数
    ex = Exception("密码长度不够")

    # > 2.使用raise关键字抛出异常对象
    raise ex


# 提示用户输入密码
try:
    print(input_password())
except Exception as result:
    print(result)
def AbyB(a , b):
    try:
        c = ((a+b) / (a-b))
    except ZeroDivisionError:
        print ("a/b result in 0")
    else:
        print (c)

# Driver program to test above function
AbyB(2.0, 3.0)
AbyB(3.0, 3.0)

# 输出结果
-5.0
a/b result in 0 

异常类型

 1 BaseException
 2  +-- SystemExit
 3  +-- KeyboardInterrupt
 4  +-- GeneratorExit
 5  +-- Exception
 6       +-- StopIteration
 7       +-- StopAsyncIteration
 8       +-- ArithmeticError
 9       |    +-- FloatingPointError
10       |    +-- OverflowError
11       |    +-- ZeroDivisionError
12       +-- AssertionError
13       +-- AttributeError
14       +-- BufferError
15       +-- EOFError
16       +-- ImportError
17            +-- ModuleNotFoundError
18       +-- LookupError
19       |    +-- IndexError
20       |    +-- KeyError
21       +-- MemoryError
22       +-- NameError
23       |    +-- UnboundLocalError
24       +-- OSError
25       |    +-- BlockingIOError
26       |    +-- ChildProcessError
27       |    +-- ConnectionError
28       |    |    +-- BrokenPipeError
29       |    |    +-- ConnectionAbortedError
30       |    |    +-- ConnectionRefusedError
31       |    |    +-- ConnectionResetError
32       |    +-- FileExistsError
33       |    +-- FileNotFoundError
34       |    +-- InterruptedError
35       |    +-- IsADirectoryError
36       |    +-- NotADirectoryError
37       |    +-- PermissionError
38       |    +-- ProcessLookupError
39       |    +-- TimeoutError
40       +-- ReferenceError
41       +-- RuntimeError
42       |    +-- NotImplementedError
43       |    +-- RecursionError
44       +-- SyntaxError
45       |    +-- IndentationError
46       |         +-- TabError
47       +-- SystemError
48       +-- TypeError
49       +-- ValueError
50       |    +-- UnicodeError
51       |         +-- UnicodeDecodeError
52       |         +-- UnicodeEncodeError
53       |         +-- UnicodeTranslateError
54       +-- Warning
55            +-- DeprecationWarning
56            +-- PendingDeprecationWarning
57            +-- RuntimeWarning
58            +-- SyntaxWarning
59            +-- UserWarning
60            +-- FutureWarning
61            +-- ImportWarning
62            +-- UnicodeWarning
63            +-- BytesWarning
64            +-- ResourceWarning

常见的异常类型如下:
Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions python 模块中定义。

AttributeError:   属性错误,特性引用和赋值失败时会引发属性错误
NameError:        试图访问的变量名不存在
SyntaxError:      语法错误,代码形式错误
IOError:          python ioerror,一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误
KeyError:         使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError:       索引错误,使用的索引不存在,常索引超出序列范围
TypeError:        类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误
ZeroDivisonError: 除数为0,在用除法操作时,第二个参数为0时引发了该错误
ValueError:       值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

异常处理的优点

  • 提高程序可靠性:通过正确处理异常,可以防止程序由于意外错误或输入而崩溃或产生不正确的结果。
  • 简化错误处理:异常处理允许您将错误处理代码与主程序逻辑分离,从而更易于阅读和维护代码。
  • 更干净的代码:通过异常处理,您可以避免使用复杂的条件语句来检查错误,从而使代码更清晰,可读性更强。
  • 更容易调试:当一个异常被抛出时,Python解释器会打印一个回溯,显示异常发生的确切位置,从而更容易调试代码。

断言函数assert

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况

assert 断言成功则继续进行,断言失败则程序报错

1.断言能够别人更好的理解自己的代码

2.找出程序中逻辑不对的一方面

3.断言会提示某个对象会处于何种状态

语法:assert expression1 [, expression2]
assert <断言判断条件> [,"错误提示消息"]
assert condition

 if not condition:
  raise AssertionError()
import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

# 执行结果
AssertionError: 该代码只能在 Linux 下执行


def is_even(num):
    return num % 2 == 0

# 判断一个数是否为偶数
assert is_even(10), "这不是一个偶数"

标签:assert,Exception,21,错误,python,+--,try,异常,断言
From: https://www.cnblogs.com/tian777/p/17773952.html

相关文章

  • Python入门进阶:68 个 Python 内置函数详解
    内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。截止到python版本3.6.2,python一共提供了68个内置函数,具体如下abs()dict()help()min()setattr()all()dir()hex()next()slice()any()divmod()id()object()sorted()ascii()enumerate()input()......
  • Python 快速入门
    Python快速入门更好的阅读体验?0.前景知识......
  • 基于Python的《计算机组成原理》在线学习平台-计算机毕业设计源码+LW文档
    摘 要 随着互联网的发展,通过计算机来学习是当前非常流行的一种学习方式。通过课程虽然可以面对面的进行交流和学习,但是很多时候因为地区和空间的限制会受到很多的影响但是通过网络来进行学习可以打破这一局限性,为此我开发了本基于Python的《计算机组成原理》在线学习平台网站......
  • 基于python的旅游网站-计算机毕业设计源码+LW文档
    摘 要 随着时代的发展,人们对旅游也越来越重视,近些年来我国的旅游产业也发生了翻天覆地的变化,但是很多人在出去旅游的时候不知道去哪里旅游,在预订酒店和机票的时候也没有一个综合性的旅游网站,为了让人们的旅游变的更加的方便,为此我开发了本基于python的旅游网站本基于python的......
  • P2198 题解
    解题思路激光塔一定在最后。\(f_{i,j}\)表示前\(i\)个位置放\(j\)(\(j\lei\))个放射塔,那么\(i-j\)个干扰塔的伤害。若第\(i\)个位置放放射塔:\(f_{i,j}=f_{i-1,j-1}+(j-1)\timesg\times[t+b\times(i-j)]\)若第\(i\)个位置放干扰塔,也就是\(j<i\):\(f_{i,j}=\max\{f_{i-......
  • 力扣每日一题+python知识点回顾
    力扣题目:执行K次操作后的最大分数(题号:2530)给你一个下标从0开始的整数数组nums和一个整数k。你的起始分数为0。在一步操作中:选出一个满足0<=i<nums.length的下标i,将你的分数增加nums[i],并且将nums[i]替换为ceil(nums[i]/3)。返回在恰好执......
  • Dreamweaver 2021 下载及安装教程 DW下载 软件激活版
    DreamweaverCC2017中文版简称为“DW”,它是由国外知名公司Adobe开发的一个集网页制作和管理网站于一身的所见即所得网页代码编辑器。拥有实时检查和CSS设计工具等多项增强功能,可以帮助用户更加轻松地创建和更新桌面平台和移动设备的网页内容,另外,它强大的快速检查功能可以帮助网页设......
  • 笨办法学Python3 习题36 设计与调试
    if语句规则:每一条if语句必须包含一个else如果else永远都不会执行到,就在后面加die函数if语句嵌套不要超过两层,最好保持一层当作段落来对待,每一个ifelifelse组合,前后加空行来区分如果布尔式复杂的化,先将运算赋给变量循环的规则:永不停止的循环用while循环,......
  • 代码训练营第八天(Python)| 344.反转字符串、541. 反转字符串II、05.替换空格、151.翻转
    344.反转字符串双指针法时间复杂度为:O(n),空间复杂度为:O(1)classSolution:defreverseString(self,s:List[str])->None:"""Donotreturnanything,modifysin-placeinstead."""left,right=0,len(s......
  • 基于Python的招聘网站爬虫及可视化的实现-计算机毕业设计源码+LW文档
    摘要随着社会经济的快速发展,人们的生活水平得到了显著提高,但随之而来的社会问题也越来越多。其中最为显著的就是就业问题。为此,招聘信息的展示也变得越来越为重要。但是在大量的招聘信息中,人们在提取自己最想要的信息时变得不那么容易,对于应聘者也是如此。本系统通过对网络爬虫的......