Python学习日记(十二)


异常处理

  • Python标准异常总结
  • 异常检测
    • try-excpt语句
    • try语句一旦检测到异常try中的代码都不会执行
    • 其中reason是一个变量,用于存放错误原因,可以打印出来
    • try可以和多个except搭配
    • 不能捕获未定义的Error
    • 不定义错误类型而只使用try-except时无论出什么错都能捕获到(不建议,因为它会隐藏所有程序员未想到并且未做好准备处理的错误,例如用户输入ctrl+c试图终止程序会被解释为KeyboardInterrupt异常。)
    • try:
          检测范围
      except Exception[as reason]:
          出现异常(Exception)后的处理代码
      一:
      try:
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except OSError:
          print("文件出错啦!")
          
      二:    
      try:
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except OSError as reason:
          print("文件出错啦!错误的原因是:"+str(reason))
          
      三:
      try:
          sum=1+'1'
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except OSError as reason:
          print("文件出错啦!错误的原因是:"+str(reason))
      except TypeError as reason:
          print("类型出错啦!错误的原因是:"+str(reason))
          
      或者
      try:
          sum=1+'1'
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except (OSError,TypeError) :
          print("出错啦!")
      
          
          
      四:
      try:
          int('abc')
          sum=1+'1'
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except OSError as reason:
          print("文件出错啦!错误的原因是:"+str(reason))
      except TypeError as reason:
          print("类型出错啦!错误的原因是:"+str(reason))
      Traceback (most recent call last):
        File "E:\大三冬\PYTHON\class2.py", line 2, in 
          int('abc')
      ValueError: invalid literal for int() with base 10: 'abc'
      
      
      五:
      try:
          int('abc')
          sum=1+'1'
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          f.close()
      except :
          print("文件出错啦!")
      文件出错啦!
    • try-finally 

    • try:
          检测范围
      except Exception[as reason]:
          出现异常(Exception)后的处理代码
      finally:
          无论如何都会执行的代码
    • try:
          f=open('这是一个不存在的文件.txt')
          print(f.read())
          sum=1+'1'
      except (OSError,TypeError) :
          print("出错啦!")
      finally:
          f.close()
      
    • raise
    • raise语句可以用于引发一个异常
      >>> raise
      Traceback (most recent call last):
        File "", line 1, in 
          raise
      RuntimeError: No active exception to reraise
      >>> raise ZeroDivisionError('除数为零的异常')
      Traceback (most recent call last):
        File "", line 1, in 
          raise ZeroDivisionError('除数为零的异常')
      ZeroDivisionError: 除数为零的异常

习题:

1、尝试一个新的函数 int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。

  • def int_input(prompt=''):
        while True:
            try:
                int(input(prompt))
                break
            except ValueError:
                print('出错,您输入的不是整数!')
     
    int_input('请输入一个整数:')

丰富的else语句和简洁的with语句

  • else与异常语句搭配
  • try:
        print(int('123'))
    except ValueError as reason:
        print('出错啦:'+str(reason))
    else:
        print("没有任何异常!")
    123
    没有任何异常!
  • with语句

     

  • 使用with语句可以使你不比再担心文件打开后却忘了关闭的尴尬
  • with语句会自动处理文件的打开和关闭,如果中途出现异常,会执行清理代码,然后确保文件自动关闭。
  • with context_expression [as target(s)]:
        with-body
  • try:
        with open('data.txt','w') as f:
            for each_line in f:
                print(each_line)
    except OSError as reason:
        print('出错啦:' + str(reason))