{
"cells": [
{
"cell_type": "markdown",
"id": "20db7ef1",
"metadata": {},
"source": [
"# 一、第6章 异常处理\n",
" 1、什么是异常、什么是异常处理 \n",
" 异常是指程序在运行过程中发生的错误事件,影响程序的正常执行。异常并不是一定会发生,\n",
" 默认情况下,程序运行中遇到异常时将会终止,并在控制台打印出异常出现的堆栈信息。\n",
" 异常处理是指程序设计时为了避免因异常而导致程序终止而做的一些额外操作。异常处理可\n",
" 以使得异常出现后,程序仍然可以执行。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "dfe907e0",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'a' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_7112\\3217722559.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m#未定义变量\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mNameError\u001b[0m: name 'a' is not defined"
]
}
],
"source": [
"print(a) #未定义变量"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e3f1c0a9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"请输入一个整数:1\n"
]
},
{
"ename": "TypeError",
"evalue": "unsupported operand type(s) for /: 'int' and 'str'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_7112\\1990936989.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0minput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'请输入一个整数:'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;36m12\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0ma\u001b[0m \u001b[1;31m#数据类型错误\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for /: 'int' and 'str'"
]
}
],
"source": [
"a = input('请输入一个整数:')\n",
"12/a #数据类型错误"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "43fe5625",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"请输入一个整数:0\n"
]
},
{
"ename": "ZeroDivisionError",
"evalue": "division by zero",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_7112\\3139060878.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'请输入一个整数:'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;36m12\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0ma\u001b[0m \u001b[1;31m#数据类型错误\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mZeroDivisionError\u001b[0m: division by zero"
]
}
],
"source": [
"a = int(input('请输入一个整数:'))\n",
"12/a #数据类型错误"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "f082b7ff",
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "unexpected EOF while parsing (3462872440.py, line 1)",
"output_type": "error",
"traceback": [
"\u001b[1;36m File \u001b[1;32m\"C:\\Users\\Administrator\\AppData\\Local\\Temp\\ipykernel_7112\\3462872440.py\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m print('ok'\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m unexpected EOF while parsing\n"
]
}
],
"source": [
"print('ok'"
]
},
{
"cell_type": "markdown",
"id": "8c5c7f8b",
"metadata": {},
"source": [
"### 2、如何处理异常\n",
" Python中通常将可能发生异常的代码放在try语句中,\n",
" 如果发生异常则通过except语句来捕获异常并对做一些额外处理,\n",
" 如果没有发生异常则执行后面的else语句,\n",
" 最后执行finally语句做一些收尾操作。\n",
" Python中还提供了raise语句允许用户主动抛出异常,raise关键词后面需要提供来一个异常实例或者异常类,如果传递是异常类,则会调用无参数第构造方法来实例化对象。如果捕获到了异常,可以直接通过raise语句抛出异常,此时raise关键字后面可以什么都不用写。"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "099c4c2a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"请输入一个整数:12\n",
"a= 12\n",
"b = 2.0\n"
]
}
],
"source": [
"a = int(input('请输入一个整数:'))\n",
"try:\n",
" b = 12/a\n",
"except:\n",
" if a == 0:\n",
" print('ZeroDivisonError:除数不能为0!')\n",
"else:\n",
" print('a=',a)\n",
"finally:\n",
" print('b = ',b+1)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "eabe0204",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"请输入一个长度在6到12位之间的密码字符串:11111111111\n",
"长度符合要求!\n"
]
}
],
"source": [
"#实例:定义一个函数,验证密码字符串长度是不断为6-10,不符合要求时抛出异常。(设置密码验证)\n",
"def check_str(content):\n",
" if (len(content)<6 or len(content)>12):\n",
" raise ValueError('长度应在6-12位之间,当前长度为:'+str(len(content)))\n",
" else:\n",
" print('长度符合要求!')\n",
" \n",
"#调用函数,不捕获异常(发生异常时,打印异常堆栈信息)\n",
"ss = input('请输入一个长度在6到12位之间的密码字符串:')\n",
"check_str(ss)"
]
},
{
"cell_type": "markdown",
"id": "24ff330f",
"metadata": {},
"source": [