【纯文本教程】大学专科的Python基础开发课?p=7

“Python基础开发”课程_课堂笔记(HTML版_007)

Class notes of "Python basic development",this webPage is seventh Page.

本页面的“代码demo索引”:(2.6 Python异常处理)


2.6 Python异常处理

先来看个例子:

import math
n = float(input("Enter:")
print(math.sqrt(n))
print("Well done,mission completed!")

个时候,如果输入了非数字,就会因为出现异常,而报错,导致程序中断。(如果输入的数据,“不像目标数据类型”的话,就会出现错误提示,然后继续执行后面的代码。)

在Python中,程序如果运行出错时,就会终止——这个错误,不是程序有问题,而是在程序运行过程中,因为数据输入不正确而导致的,运行时的错误(Runtime Error)。这个时候,就要用到“异常处理语句”,进行修改——加入“try-except语句”:

import math
n = input("Enter:")
try:
 n = float(n)
 print(math.sqrt(n))
 print("Well done mission completed!")
except Exception as err:
 print(err)
print("End")

这样的话,即使是出现了异常,也会因为被及时捕获,而不会终止程序的正常运行。

>>>
=============== RESTART: C:\UPan\Python2020\Python2020_demo.py ===============
Enter:Python
could not convert string to float: 'Python'
End
>>>

 

“异常”是程序中因为输入(或者是其他操作不当),引发的运行错误。还有网络状况、剩余空间等客观原因,也会引起异常。但是,程序必须要有处理异常情况的能力,增强程序的“健壮性”,使得程序在各种情况下,都不会崩溃。

在Python里面,有很多“异常类”,针对不同情况使用。使用最多的方法的“try-except语句”配合“Exception”类。

try语句是有固定格式的:

#导入模块
#定义全局变量
try:
 语句块1
except Exception as err:#“err”是变量名
 语句块2
后续语句

先执行“语句块1”,如果能够正常执行,没有报错的话,就执行“后续语句”;

如果在“语句块1”中,出现了错误,错误信息就会被“Exception”对象捕获,然后,跳过中间的代码,直接执行“语句块2”,在“语句块2”执行完后,再执行“后续语句”

举个例子:

print("link start!")#可以理解为程序“初始化”,告诉人类,程序开始运行了
try:
 print("divided")
 n = 1/0#故意找茬
 print("finish")
except Exception as err:
 print(err)
print("end")

在IDLE中执行上述代码,运行结果如下:

>>>
=============== RESTART: C:\UPan\Python2020\Python2020_demo.py ===============
link start!
divided
division by zero#除数为零
end
>>>

综上所述,有异常的话,就需要抛出——在Python中是用“raise语句”:raise Exception(异常信息),“raise”是抛出语句,“Exception”表示建立一个异常类对象,用指定字符串设置Message属性。

举个例子:

#用raise语句抛出异常
print("link start!")#可以理解为程序“初始化”,告诉人类,程序开始运行了
try:
 print("In try")
 raise Exception("My Error")#这个不是真的“异常”而是测试
 print("finish")
except Exception as err:
 print(err)
print("end")

 

【例题】应用异常处理,计算整数的平方根
import math
while True:
 try:
  n = int(input("Enter:"))
  if n<0:
   raise Exception("负数没有平方根!")
 break
 except Exception as err:
  print("输入错误:".err)
print(math.sqrt(n))
print("end")

 

如果不关心异常的信息,只需要捕获异常的话,在except语句中,就不需要写Exception,可以简化为:

try:
 语句块1
except:
 语句块2
后续语句

 

【例题】应用异常处理,录入信息——姓名、性别、年龄:

  • #描述:姓名非空;性别“男”或者“女”;年龄18~30
  • #分析:构造异常语句,输入有误就抛出异常

try:
 name = input("姓名:\n")#第一步,输入变量值
 if name.strip()=="":#去除首尾的空格后,为空值的话……
  raise Exception("姓名不能为空")
 gender = input("性别(男 or 女):\n"):
 if gender != "男" or gender != "女":
  raise Exception("输入无效!")
 age = int(input("年龄:\n"))
 if age30:
  raise Exception("年龄18~30")
 print(name,gender,age)
except Exception as err:
 print(err)

这里有一个不认识的内置函数?节选“帮助文档”(help(str))的一小部分:

strip(self, chars=None, /)
 Return a copy of the string with leading and trailing whitespace remove.# 返回删除前导和尾随空白的字符串副本。
 If chars is given and not None, remove characters in chars instead.# 如果给出了字符,而不是没有字符,请改为删除字符中的字符。


第7堂课,内容为条件分支语句和循环语句。

本页面(?p=7)的实际上课时间为2020年4月24日第3小节课。

下节课(?p=8)是在讲例题:

  1. 第一个是调试上节课的例题(应用异常处理,录入信息——姓名、性别、年龄)
  2. 第二个是兑换可乐的例题(只说了思路,没有代码,图片中的文字不能直接复制,这里就不记了)
  3. 第三个是用Python语言,编写程序,验证“哥德巴赫猜想”(将偶数分解为两个质数的和,侧重点是讲思路,有完整代码,虽然这一“p”可以只放这一个小项目,但是我就是想跳过,不过,暂时保留“?p=8”)

由于并没有讲课,第8“p”就空着,下面评论中就直接放第9“p”的网址。

(由于是教学,因此在后面的课程中,老师没有讲课的“实训课”,我都会直接空着,并在前一“p”的页脚注明)

 

posted on 2020-05-26 11:25  机器人DX3906  阅读(260)  评论(0)    收藏  举报

导航