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))