【Python】-6.Python中的错误和异常


作为 Python 初学者,在学习 Python 编程时,经常会看到一些报错信息,在前面我们没有提及,这章节我们会专门介绍。

Python 有两种错误很容易辨认:语法错误和异常。

1. 语法错误

Python 的语法错误或者称之为解析错,一般以 Synatax Error 开头

print while True:
      ^
# SyntaxError: Missing parentheses in call to 'print'. Did you mean print(while True:)

2. 异常

运行时检测到的错误被称为异常,有些错误可能不是致命的,但如果程序对大多数异常都不做处理,Python解释器会输出异常信息到屏幕上并终止程序

# 错误: ZeroDivisionError: division by zero
print(1/0)

其他常见异常

# TypeError: can only concatenate str (not "int") to str
"1" + 0

# KeyError: 'world'
d = {}
d["world"]

# IndexError: list index out of range
l = [1,2,3,4]
l[20]

3. 处理异常

有如下程序

while True:
    number = int(input("请输入一个数字:"))

如果输入的是数字,可以正常运行;但如果输入的不是数字,会出现错误: ValueError: invalid literal for int() with base 10: ‘a’

3.1 使用try…except处理异常

while True:
    try:
        number = int(input("请输入一个数字:"))
    except ValueError:
        print("您输入的恐怕不是一个有效数字!请重试!")

3.2 except接收多种异常

while True:
    try:
        number = int(input("请输入一个数字:"))
        if number > 20:
            break
    except KeyError:
        print("KeyError")
    except ValueError:
        print("ValueError")
    except KeyboardInterrupt:
        print("用户终止,退出程序")
        exit()
    except Exception as e:
        print("未知错误", e)

4. 抛出异常

在Python中可以抛出异常,使用 raise 关键字

raise Exception
raise Exception("这是错误信息")

5. finally子句

Python 的finally需要和try一起使用,finally子句在异常中的作用是:无论是否异常或捕获了异常,finally子句都会保证执行

5.1 except捕获异常

try:
    print(1/0)
except ZeroDivisionError:
    print("除零错误")
finally:
    print("finally子句")

# 除零错误
# finally子句

5.2 except无法捕获异常

try:
    print(1/0)
except ValueError:
    print("除零错误")
finally:
    print("finally子句")

# finally子句

6. 自定义异常

自定义异常直接或间接继承自 Exception 类

6.1 抛出自定义异常

class MyException(Exception):
    def __init__(self):
        pass

    def __str__(self):
        return "这是一个自定义异常"


def raise_customer_exception():
    raise MyException()

6.2 捕获自定义异常

try:
    raise_customer_exception()
except MyException as e:
    print("Error!", e)

# Error! 这是一个自定义异常

文章作者: Soulballad
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Soulballad !
评论
 上一篇
【Python】-7.Python中的模块 【Python】-7.Python中的模块
1. 模块1.1 模块介绍 模块是一个包含了Python定义和声明的 “.py” 文件。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。 定义 fibs.py 模块 # fibs.py def
2020-09-12
下一篇 
【Python】-5.Python面向对象 【Python】-5.Python面向对象
Python是一门面向对象的语言,所以在Python中需要创建类和对象 1. 面向对象1.1 类的创建类的定义: class [类名]: [语法块] class EmptyClass: pass 1.2 类的使用class
2020-09-08
  目录