赞
踩
while True:
try:
price=float(input("请输入价格:"))
print('价格为:%5.2f' % price)
break
except ValueError:
print('您输入的不是数字。')
程序运行结果:
请输入价格:x
您输入的不是数字。
请输入价格:y
您输入的不是数字。
请输入价格:12.989
价格为:12.99
try:
<可能出现异常的语句块>
except <异常类名字name1>:
<异常处理语句块1> #如果在try部份引发了'name1'异常,执行这部分语句块
except <异常类名字name2> as e1:
<异常处理语句块2> #如果在try部份引发了'name2'异常,执行这部分语句块
except < (异常类名字name3, 异常类名字name4, …)> as e2:
<异常处理语句块3> #如果引发了'name3'、'name4'、…中任何一个异常,执行该语句块
…
except:
<异常处理语句块n> #如果引发了异常,但与上述异常都不匹配,执行此语句块
else:
<else语句块> #如果没有上述所列的异常发生,执行else语句块
finally:
<任何情况下都要执行的语句块>
try:
x=float(input('请输入设备成本:'))
y=int(input('请输入分摊年数:'))
z=x/y
print('每年分摊金额为%.2f'% z)
except ZeroDivisionError:
print("发生异常,分摊年数不能为0.")
except:
print('输入有误')
else:
print("没有错误或异常")
finally:
print('不管是否有异常发生,始终执行finally部分的语句')
如果在终端以正确的格式输入,则except后面的模块均不会执行,else后的模块会得到执行,finally后面的模块语句会执行。程序运行结果如下:
请输入设备成本:15
请输入分摊年数:3
每年分摊金额为5.00
没有错误或异常
不管是否有异常发生,始终执行finally部分的语句
如果在终端输入的被除数为0,则会检测到ZeroDivisionError异常对象,在except ZeroDivisionError之后的模块会得到执行来处理该异常。异常处理完成后,执行finally后面的语句块。程序运行结果如下:
请输入设备成本:15
请输入分摊年数:0
发生异常,分摊年数不能为0.
不管是否有异常发生,始终执行finally部分的语句
如果在终端只输入除数,没有输入被除数,try模块中将抛出TypeError异常。在程序的异常处理except中没有列出该类型异常的处理程序模块,但是TypeError是except的子类,因此不带异常类型的except模块能够拦截该异常进行处理。异常处理结束后,finally后面的语句也会得到执行。程序运行结果如下:
请输入设备成本:15
请输入分摊年数:
输入有误
不管是否有异常发生,始终执行finally部分的语句
with context-expression [as var]:
with语句块
为了读取、打印该文件中的所有内容,并确保程序在出现异常时也能正确关闭文件对象,使用try-finally的程序:
try:
f=open('testwith.txt','r')
for line in f:
print(line,end='')
finally:
f.close()
with open('testwith.txt','r') as f:
for line in f:
print(line,end='')
由于使用了with语句,不需要try-finally语句来确保文件对象的关闭。无论该程序是否出现异常,文件对象都将由系统自动关闭。
断言从Python1.5版本开始引入,是申明表达式为真的判定。如果表达式为假则抛出异常。断言语句可以理解为raise-if-not语句,用来测试表达式,如果表达式为假,则触发AssertionError异常;如果表达式为真,也就是断言成功,则程序不采取任何措施。断言的语法格式如下:
assert expression [, arguments]
其中expression是断言表达式;arguments是断言表达式为假时传递给AssertionError对象的字符串。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。