异常处理-python进阶篇十一

  Python使用被称为异常 的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

  异常是使用try-except 代码块处理的。try-except代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback

  格式:

try:

  可能出现异常的代码

except;

  如果有异常执行的代码

else;

  依赖于try 代码块成功执行的代码,不ba

[finally:

  无论是否存在异常都会被执行的代码]

 

  情况1:

try:

  有可能会产生多种异常

except 异常类型1:

  print(.....)

 

except 异常类型2:

 

  print(.....)

except Exception;

  pass

except Exception as err:

  print('出错了!',err)    # 可以输出上面没有的错误类型,但是系统的错误类型

如果是多个except,异常类型的顺序需要注意,最大的Exception要放到最后

 

  情况2:获取Exception错误原因

try:

  有可能会产生多种异常

except 异常类型1:

  print(.....)

except 异常类型2:

  print(.....)

except Exception as err:

  print('出错了!',err)    # 可以输出上面没有的错误类型,但是系统的错误类型

 

 

print(5/0)

Traceback (most recent call last):
    File "division.py", line 1, in <module>
        print(5/0)
ZeroDivisionError: division by zero

  1、使用try-except 代码块

try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

  2、使用try-except-else代码块

  通过将可能引发错误的代码放在try-except 代码块中,可提高这个程序抵御错误的能力。错误是执行除法运算的代码行导致的,因此我们需要将它放到try-except 代码块中。这个示例还包含一个else 代码块;依赖于try 代码块成功执行的代码都应放到else 代码块中:

print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
    first_number = input("\nFirst number: ")
    if first_number == 'q':
        break #跳出循环
    second_number = input("Second number: ")
    try: #尝试执行try 代码块中的除法运算
        answer = int(first_number) / int(second_number)
    except ZeroDivisionError: #except 代码块告诉Python,出现ZeroDivisionError 异常时该怎么办
        print("You can't divide by 0!")
    else:
        print(answer)
'''
Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
You can't divide by 0!
First number: 5
Second number: 2
2.5
First number: q
'''

   注意:如果代码中出现了return,else语句将不会执行。

  3、处理FileNotFoundError 异常

  使用文件时,一种常见的问题是找不到文件:你要查找的文件可能在其他地方、文件名可能不正确或者这个文件根本就不存在。

filename = 'alice.txt'
try:
    with open(filename) as f_obj:
        contents = f_obj.read()
except FileNotFoundError:
    msg = "Sorry, the file " + filename + " does not exist."
    print(msg)

  如果缺少一个文件但是不想报错,就像什么都没有发生一样继续运行。个pass语句,可在代码块中使用它来让Python 什么都不要做。

def count_words(filename):
    """计算一个文件大致包含多少个单词"""
try:
    --snip--
except FileNotFoundError:
    pass #直接过,什么都不做
else:
    --snip--

filenames = ['alice.txt', 'siddhartha.txt', 'moby_dick.txt', 'little_women.txt']
for filename in filenames:
    count_words(filename)
'''
The file alice.txt has about 29461 words.
The file moby_dick.txt has about 215136 words.
The file little_women.txt has about 189079 words.
'''

  4、使用try-except-finally代码块

  finally中的语句无论是否出现异常都会执行

def func():
    stream = None
    try:
        stream = open(r'c:\pi\aa.txt')
        container=stream.read()
        print(container)
    except Exception as err:
        print(err)
    finally:  # 无论是否出现异常都会执行,即便上面出现了return也会执行
        if stream:
            stream.close()

func()

 

posted @ 2021-09-19 08:52  逍遥abin  阅读(82)  评论(0编辑  收藏  举报