Python基础-16.异常处理

TOC

一、Pythony异常处理

在平时过程中会出现很多异常比如:

ZeroDivisionError: division by zero  
NameError: name 'spam' is not defined  
TypeError: can only concatenate str (not "int") to str  

我们可以通过一些处理来避免异常出现程序崩溃的现象

1.try…except语句

try…except语句可以处理异常使得系统继续
语法:

try:
    执行代码
except 错误类型:
    该类错误类型执行的代码
except:
    发生其他异常执行的代码

实例1:让用户输入一个合法的整数,如果不是整数提示错误并继续,可以中断

while True:
    try:
        x = int(input("请输入一个数字: "))
        break
    except ValueError:
        print("您输入的不是数字,请再次尝试输入!!!")
# 1.首先,执行 try 下面的代码  
# 2.如果没有异常发生,忽略 except 后面的操作,try 后面的执行完成则结束  
# 3.如果在执行 try 子句的过程中发生了异常,那么 try 下面的代码余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的 except 部分将被执行。  
# 4.如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。

2.try…except…else语句

语法:

try:
    执行代码
except 错误类型:
    该类错误类型执行的代码
except:
    发生其他异常执行的代码
else:
    没有发生错误时执行的代码

实例1:定义一个字符串判断是不是整数

a, b = 12, 13
try:
    c = a + b
except:  
    print('field!!!')
else:
    print(c)

3.try…finally语句

语法:

try:
    执行代码
except 错误类型:
    该类错误类型执行的代码
except:
    发生其他异常执行的代码
else:
    没有发生错误时执行的代码
finally:
    无论如何都要执行的代码

实例1:下载一个文件处理错误异常

import requests
new_file = 'mytest.exe'
try:
    response = requests.get('https://download/test.exe')
except requests.exceptions.ConnectionError as e:
    print(f'Connection Error: {e}')
except requests.exceptions.Timeout as e:
    print(f'Timeout Error: {e}')
else:
    with open(new_file, 'wb') as f:
        f.write(response.content)
        f.close()
    print(f'Downloaded file https://download/test.exe saved to {new_file}...')
finally:
    print('Process ended!!!')