闽公网安备 35020302035485号

示例:
print "Hello,World!"Python 3 已不再支持上面这种写法,所以在运行时,解释器会报语法错误。
示例:
a = 1/0上面这句代码的意思是“用 1 除以 0,并赋值给 a 。因为 0 作除数是没有意义的,所以运行后会产生运行时错误。在 Python 中,把这种运行时产生错误的情况叫做异常(Exceptions),常见的几种异常情况如下。
try:
...
except
...
1.不确定异常类型时# try...except...不确定异常类型时,可用万能异常捕获
try:
a = 1
b = 0
print(a / b)
except Exception as e: # 不适用except异常捕获时,报错ZeroDivisionError: division by zero
print(e) # division by zero
print(e.args) # ('division by zero',)
2.指定异常类型# try...except...指定异常类型
try:
f = open("a.txt")
f.read()
except FileNotFoundError as e:
print(e) # [Errno 2] No such file or directory: 'a.txt'
print(e.args) # (2, 'No such file or directory')
print(e.strerror) # No such file or directory
print(e.filename) # a.txt
print(e.errno) # 2
3.捕获多个异常# try...except...except...定义多个except捕获多个异常
try:
a = [1, 2]
print(a[3])
except IOError as e: # 由于try中的内容不属于IOError,所以会跳过这个异常,进入下一个异常进行判断
print("读写异常")
print(e)
except IndexError as e:
print(f"数组越界异常:{e}") # 数组越界异常:list index out of range
# try...except(IOError,ValueError)...一个except中声明多个异常
try:
a = [1, 2]
print(a.index(3))
except (IOError, ValueError) as e:
print(f"读写异常或结果异常:{e}") # 读写异常或结果异常:3 is not in list
三、try except else详解# try...except...else...异常捕获
try:
age = 18
print(age)
except ValueError as e:
print(e)
else: # 只有当try中定义的语句无异常时,才会走到else分支
print("无异常") # 打印结果:无异常
四、try except finally:资源回收# try...except...finally...异常捕获
try:
f = open('read1.txt')
except FileNotFoundError as e:
print(e) # [Errno 2] No such file or directory: 'read1.txt'
else:
print("文件读写正常")
finally: # 无论程序是否有异常,都会走到finally分支
print("over") # over
五、raise主动触发异常# raise主动触发异常
try:
num = input("请输入一个数字:")
if not num.isdigit():
raise ValueError('num 非数字,请输入数字')
except ValueError as e:
print("结果异常,请检查输入项")
六、traceback模块:获取异常信息try:
f = open('read1.txt')
f.read()
except Exception as e:
print(e) # [Errno 2] No such file or directory: 'read1.txt'
print(sys.exc_info()) # 打印异常信息
# (<class 'FileNotFoundError'>, FileNotFoundError(2, 'No such file or directory'), <traceback object at 0x033F5048>)
2.使用traceback模块中的相关函数traceback.print_exc()
try:
f = [0, 1, 2, 3]
f.index(5)
except ValueError as e:
print(traceback.print_exc())
# 将异常信息输出到控制台或指定文件中,注:此时控制台打印的为捕获的异常信息,非报错
traceback.print_exc()打印的异常信息如下:
try:
f = [0, 1, 2, 3]
f.index(5)
except ValueError as e:
# print(traceback.print_exc())
# 将异常信息输出到控制台或指定文件中,注:此时控制台打印的为捕获的异常信息,非报错
error_info = traceback.format_exc() # 返回一个字符串而不是打印到文件
print(error_info)
