示例:
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) # 23.捕获多个异常
# 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)