申明:资料来源于网络及书本,通过理解、实践、整理成学习笔记。
语法错误
在python中如果错误信息以"SynataxError"开头,说明python解释器认为这是一个语法错误,同时会提示你在哪个文件的哪一行开始出错。语法错误通常意味着我们使用python书写格式或者使用方法不正确。
print:
执行结果:
File "E:\Python\Study\error.py", line 1
print:
^
SyntaxError: invalid syntax
异常
即使python程序的语法是正确的,但是在运行的时候也可能发生一些预想之外的错误。运行时检测到的错误被称为异常,有些错误可能不是致命的,但如果程序员对异常不错处理,python解释器会输出异常到控制台上并终止程序。
python标准异常:
- BaseException: 所有异常的基类
- SystemExit: 解释器请求退出
- KeyboardInterrupt: 用户中断执行(通常是输入^C)
- Exception: 常规错误的基类
- StopIteration: 迭代器没有更多的值
- GeneratorExit: 生成器(generator)发生异常来通知退出
- StandardError: 所有的内建标准异常的基类
- ArithmeticError: 所有数值计算错误的基类
- FloatingPointError: 浮点计算错误
- OverflowError: 数值运算超出最大限制
- ZeroDivisionError: 除(或取模)零 (所有数据类型)
- AssertionError: 断言语句失败
- AttributeError: 对象没有这个属性
- EOFError: 没有内建输入,到达EOF 标记
- EnvironmentError: 操作系统错误的基类
- IOError: 输入/输出操作失败
- OSError: 操作系统错误
- WindowsError: 系统调用失败
- ImportError: 导入模块/对象失败
- LookupError: 无效数据查询的基类
- IndexError: 序列中没有此索引(index)
- KeyError: 映射中没有这个键
- MemoryError: 内存溢出错误(对于Python 解释器不是致命的)
- NameError: 未声明/初始化对象 (没有属性)
- UnboundLocalError: 访问未初始化的本地变量
- ReferenceError: 弱引用(Weak reference)试图访问已经垃圾回收了的对象
- RuntimeError: 一般的运行时错误
- NotImplementedError: 尚未实现的方法
- SyntaxError: Python 语法错误
- IndentationError: 缩进错误
- TabError: Tab 和空格混用
- SystemError: 一般的解释器系统错误
- TypeError: 对类型无效的操作
- ValueError: 传入无效的参数
- UnicodeError Unicode: 相关的错误
- UnicodeDecodeError: Unicode 解码时的错误
- UnicodeEncodeError: Unicode 编码时错误
- UnicodeTranslateError: Unicode 转换时错误
- Warning: 警告的基类
- DeprecationWarning: 关于被弃用的特征的警告
- FutureWarning: 关于构造将来语义会有改变的警告
- OverflowWarning: 旧的关于自动提升为长整型(long)的警告
- PendingDeprecationWarning: 关于特性将会被废弃的警告
- RuntimeWarning: 可疑的运行时行为(runtime behavior)的警告
- SyntaxWarning: 可疑的语法的警告
- UserWarning: 用户代码生成的警告
处理异常
使用try和except关键字捕获异常并让我们运行相应的代码去处理异常。
try:
业务语法块
except 异常类型:
处理异常语法块
在try业务块语法中产生的异常都会终止业务语法块并跳转到except匹配异常类型,如果能匹配上,则运行处理异常的语法块,否则程序报错退出。
number = int(input('请输入一个数字:'))
print(number)
执行结果:
请输入一个数字:a
number = int(input('请输入一个数字:'))
ValueError: invalid literal for int() with base 10: 'a'
try:
number = int(input('请输入一个数字:'))
print(number)
except ValueError:
print('输入了无效的数字', ValueError)
except Exception as e:
print('输出错误', e)
执行结果:
请输入一个数字:a
输入了无效的数字 <class 'ValueError'>
上面就是一个处理异常的例子,首先在try中编写我们的业务逻辑代码,然后根据错误类型定义多个异常处理的except语句块。如果有多个except,那么python解释器会逐个匹配except后的异常类型,匹配到则运行相应的处理异常的语法块,没有匹配到则输出异常并退出程序。由于大部分异常都是从Exception这个父类继承过来的,所有匹配的异常类型是Exception,大部分几率是能匹配到异常的。
finally子句
python中的finally子句需要和try子句搭配着一起使用。finally子句在异常处理中的作用是:无论是否有异常或者是否捕获了异常,finally子句都会执行。
for i in range(2):
try:
number = int(input('请输入一个数字:'))
print(number)
except Exception as e:
print('捕获到了异常', e)
finally:
print('finally子句执行')
执行结果:
请输入一个数字:1
1
finally子句执行
请输入一个数字:a
捕获到了异常 invalid literal for int() with base 10: 'a'
finally子句执行
自定义异常
- 定义我的自定义异常
class MyException(Exception): def __init__(self): pass # 当使用print输出对象的时候,若定义了__str__(self)方法,打印对象时就会从这个方法中打印出return的字符串数据。 def __str__(self): return '我自定义的异常' # raise语句用来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。 def raise_customer_exception(): raise MyException() raise_customer_exception() 执行结果: Traceback (most recent call last): File "E:\Python\Study\error.py", line 23, in <module> raise_customer_exception() File "E:\Python\Study\error.py", line 20, in raise_customer_exception raise MyException() __main__.MyException: 我自定义的异常
- 使用我的自定义异常
class MyException(Exception): def __init__(self): pass def raise_customer_exception(): raise MyException() try: raise_customer_exception() except MyException as e: print('自定义的异常', e) 执行结果: 自定义的异常
一个坚持学习,坚持成长,坚持分享的人,即使再不聪明,也一定会成为优秀的人!
如果看完觉得有所收获的话,记得一键三连哦,谢谢大家!