侧边栏壁纸
博主头像
soulballad博主等级

技术文章记录及总结

  • 累计撰写 169 篇文章
  • 累计创建 26 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

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

soulballad
2020-09-10 / 0 评论 / 0 点赞 / 48 阅读 / 1,735 字
温馨提示:
本文最后更新于 2022-03-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

作为 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! 这是一个自定义异常
0

评论区