您的位置:首页 > 编程语言 > Python开发

python try...except....else...finally处理异常

2017-11-25 16:12 645 查看
python异常处理机制中使用try…except…来进行异常处理,基本格式如下:

try:
<body>
except<ErrorTypel>:
<handler1>
except<ErrorType2>
...


举例1:

num1,num2=eval(input('Enter two numbers,separated by a comma')) #输入两个数,用逗号隔开

result=num1/num2

print('朕的睫毛能撑伞')


输入3,0,结果提示说错误,除数为零!同时“朕的睫毛能撑伞”并没有执行,因为发生错误语句中断。

Enter two numbers,separated by a comma3,0
Traceback (most recent call last):
File "D:/Python/note/test.py", line 2, in <module>
result=num1/num2
ZeroDivisionError: division by zero


如果输入的两个都不为零的数,比如3和4,但中间不是用逗号而用空格隔开,,结果也打印print语句:

Traceback (most recent call last):

File “D:/Python/note/test.py”, line 1, in

num1,num2=eval(input('Enter two numbers,separated by a comma')) #输入两个数,用逗号隔开
File "<string>", line 1
3 4
^
SyntaxError: unexpected EOF while parsing


如果我们想要提醒客户可能的输入错误,并将最后的结果打印出来,则可以用try….except …else…finally语句

try:
num1,num2=eval(input('Enter two numbers,separated by a comma')) #输入两个数,用逗号隔开
result=num1/num2
except ZeroDivisionError:
print('分母不能为零')
except SyntaxError:
print('请在两个数之间用逗号隔开')
except:  #注意冒号一定要在英文格式下输入
print('检查是否输入错误')
else:    #如果语法格式等都正确则进行else语句,注意冒号一定要在英文格式下输入
print('No exceptions, the result is>> ',result)#没有异议,结果为:
finally:           #无论输入是否正确,都要执行finally下的语句
print('朕的睫毛能撑伞')


结果如下:

Enter two numbers,separated by a comma3,0
分母不能为零
朕的睫毛能撑伞
>>>
====================== RESTART: D:/Python/note/test.py ======================
Enter two numbers,separated by a comma3 4
请在两个数之间用逗号隔开
朕的睫毛能撑伞
>>>
====================== RESTART: D:/Python/note/test.py ======================
Enter two numbers,separated by a comma3,4
No exceptions, the result is>>  0.75
朕的睫毛能撑伞


举例2

给一个txt文本用try…except…判断文本是否存在,如果不存在则给出信息,存在则计算文本有多少单词

def count_words(filename):

try:
with open(filename) as file:
contents = file.read()
except FileNotFoundError:
msg = 'Sorry, the file '+filename+' does not exist'
print(msg)
else:
words = contents.split()
n_words = len(words)
print(n_words)

filenames = ['alice.txt','pi_digits.txt','hh.txt','little_women.txt','moby_dick.txt','siddhartha.txt']
for filename in filenames:
count_words(filename)


结果如下:

29461
3
Sorry, the file hh.txt does not exist
189079
215136
42172
>>>


另外,可以通过pass直接跳过出错的提示,并执行下一步

如将上面的列子中msg = sorry….那一栏直接改为pass,即:

def count_words(filename):

try:
with open(filename) as file:
contents = file.read()
except FileNotFoundError:
pass
else:
words = contents.split()
n_words = len(words)
print(n_words)

filenames = ['alice.txt','pi_digits.txt','hh.txt','little_women.txt','moby_dick.txt','siddhartha.txt']
for filename in filenames:
count_words(filename)


结果如下:

29461
3
189079
215136
42172
>>>


举例3

判断文本是否存在,存在则将文本打印出来,否则给出错误提示

def cats_dogs(filename):
print('Reading file:'+filename)
try:
with open(filename) as f:
contents = f.read()
except FileNotFoundError:
print('Sorry,I can not find the file '+filename)
else:
print(contents)

filenames = ['cats.txt','dogs.txt','fish.txt']
for filename in filenames:
cats_dogs(filename)
print('\n')


结果如下:

Reading file:cats.txt
cats
henry
小花狗
小白

Reading file:dogs.txt
dogs
shubao
wenjuhe
bi

Reading file:fish.txt
Sorry,I can not find the file fish.txt

>>>


举例4;

输入两个数字,用try…except…判断是否是字符,如果是字符则提示输入有误,最后将两个数字相加(如果没有输入n或者q则循环一直保持下去)

def main():
print("Enter 'q' to quit\n")
while True:
try:

c047
x = input('Pleast enter a number>>>')
if (x == 'q'):
break
x = float(x)
y = input('Pleast enter another number>>>')
if (y == 'q'):
break
y = float(y)
except ValueError:
print('Please enter a number, not letter')
else:
sum = x+y
print('The sum of these number is '+str(sum))
dicision = input('Do you want to continue?y/n>>>')
if (dicision == 'n')or (dicision=='q'):
break

main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  异常处理 python