错误一般就是指语法错误,也是解析错误;通常在IDE已经会提醒有语法错误了
while True
print("test")
File "C:/异常.py", line 11
while True
^
SyntaxError: invalid syntax
解析器会报错,直接指向语法有错的地方
描述:异常一般在ide无法直接检测出来,在我们执行到代码语句时,若有异常则会自动抛出
各种算术类错误而引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError
当映射或序列所使用的的键或索引无效时引发的异常:IndexError、KeyError,都是继承该类
均是Exception的子类
AssertionError:assert断言失败时引发
AttributeError:属性引用(如: 实例对象.方法 )失败或赋值失败(如: 对象=值 )
ImportError:加载模块失败时引发,如: from list import test ,若找不到test则报此异常
ModuleNotFoundError:当一个模块找不到时引发,如: import testss ,testss不存在则报此异常;是ImportError的子类
IndexError:取序列索引超出范围
KeyError:在字典中找不到指定的Key
TypeError:当一个操作或函数被应用于类型不适当的对象时将被引发,传入参数的类型错误(如:传了string给一个int类型的参数)
ValueError:当传入的参数类型正确,但值不正确时引发(如:传入要求范围之外的数值)
UnicodeEncodeError:编码错误
UnicodeDecodeError:解码错误
OSError:调用操作系统函数时报错引发该异常,一般是I/O操作
以下所有异常都是OSError的子类
FileExistsError:文件已存在(如:创建一个文件)
FileNotFoundError:文件找不到(如:open一个文件)
PermissionError:没有权限操作文件(如:写入内容到一个正在打开的文件)
IsADirectoryError:对目录进行文件操作(如:os.remove() 传入目录路径)
NotADirectoryError:对文件进行目录操作(如:os.listdir() 传入文件路径)
部分异常只是当做警告类别
DeprecationWarning:过时,已被弃用的特性相关警告
try:
x = int(input("Please enter a number: "))
x.open()
print("继续执行try")
except AttributeError:
print("AttributeError")
except ValueError:
print("ValueError")
try
except
try
except
import sys
try:
f = open('myfile.txt')
s = f.readline()
i = int(s.strip())
except OSError as err:
print("OS error: {0}".format(err))
except ValueError:
print("Could not convert data to an integer.")
except:
print("Unexpected error:", sys.exc_info()[0])
raise
else:
print("没异常才执行")
# 若找不到myfile.txt
OS error: [Errno 2] No such file or directory: 'myfile.txt'
# 若找到文件了,但里面包含字母
Could not convert data to an integer.
# 其他异常
Unexpected error:
except
else
else
def test1():
while True:
try:
print("没异常的print")
return "try"
except ValueError:
print("Could not convert data to an integer.")
else:
print("没异常才执行")
return "else"
print(test1())
没异常的print
try
try、else里面都有 return 代码时,会优先执行try里面的,且不再执行else里面所有代码
while True:
try:
print("没异常的print")
break
except ValueError:
print("Could not convert data to an integer.")
else:
print("没异常才执行")
finally:
print("无论是否报异常都会执行")
没异常的print
没异常才执行
无论是否报异常都会执行
finally
break
try
try
def test2():
try:
print("没异常的print")
return "try"
except ValueError:
print("Could not convert data to an integer.")
finally:
print("无论是否报异常都会执行")
return "finally"
print(test2())
没异常的print
无论是否报异常都会执行
finally