返回列表 发帖

try语句

如果Python解释器遇到一个错误,就会终止程序的执行,并且提示一些错误的信息,这就是异常。

try:  尝试执行的代码;
except:  出现错误时的处理;
else:  没有出现错误时的处理;
finally:  无论是否发生错误,都执行finally下面的代码;



######

例子一:

######不使用try语句时:

#coding=utf-8

def func1():
        num  = 16 / 8
        return num
       
def func2():
        num  = 16 / 0
        return num
       
def func3():
        num  = 16 / 4
        return num

if __name__ == '__main__':

        Result_1 = func1()
        print(Result_1)
       
        Result_2 = func2()
        print(Result_2)
       
        Result_3 = func3()
        print(Result_3)


脚本运行的结果:(脚本运行到func2()发生错误就终止了)
C:\Users\jacky\Desktop>python xx.py
2.0
Traceback (most recent call last):
  File "xx.py", line 20, in <module>
    Result_2 = func2()
  File "xx.py", line 8, in func2
    num  = 16 / 0
ZeroDivisionError: division by zero

C:\Users\jacky\Desktop>



######使用try语句时:

#coding=utf-8

def func1():
        num  = 16 / 8
        return num
       
def func2():

        try:
                num  = 16 / 0
                return num
        except:
                pass
       
def func3():
        num  = 16 / 4
        return num

if __name__ == '__main__':

        Result_1 = func1()
        print(Result_1)
       
        Result_2 = func2()
        print(Result_2)
       
        Result_3 = func3()
        print(Result_3)


脚本运行的结果:(通过捕获异常,遇到错误时,脚本不会终止)
C:\Users\jacky\Desktop>python xx.py
2.0
None
4.0





######

例子二:

#coding=utf-8

x = int(input("请输入一个被除数:"))
y = int(input("请再输入一个除数:"))

def func1(x,y):

        try:
                Result_1 = x / y
                return Result_1

        except Exception as e:  #显示异常对象真正的异常信息
                print(e)
               
if __name__ == '__main__':
       
        Result_2 = func1(x,y)
       
        print(Result_2)


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:3
2.0

C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:0
division by zero
None

C:\Users\jacky\Desktop>



######

例子三:

#coding=utf-8

x = int(input("请输入一个被除数:"))
y = int(input("请再输入一个除数:"))

def func1(x,y):

        try:
                Result_1 = x / y
                return Result_1

        except Exception as e:
                print(e)

if __name__ == '__main__':
       
        Result_2 = func1(x,y)
       
        if Result_2 != None:  #返回结果不为None时,才显示
                print(Result_2)
               

多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:3
2.0

C:\Users\jacky\Desktop>python xx.py
请输入一个被除数:6
请再输入一个除数:0
division by zero

C:\Users\jacky\Desktop>



######

例子四:

#coding=utf-8

def func1():

        try:
       
                y = int(input("请输入一个除数:"))

                Result_1 = 8 / y
                print(Result_1)
       
        except ZeroDivisionError:
                print("除数不得为0")
       
        except ValueError:
                print("除数不是合法整数")
               
        else:
                print(f"除数{y}是合法整数")

if __name__ == '__main__':
       
        func1()
       

多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
除数不得为0

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
除数不是合法整数

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
除数不是合法整数

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数

C:\Users\jacky\Desktop>



######

例子五:

#coding=utf-8

def func1():

        try:
       
                y = int(input("请输入一个除数:"))

                Result_1 = 8 / y
                print(Result_1)
       
        except:  #遇到错误就忽略所有异常类,只输出自己定义的异常信息
                print("除数有问题")
               
        else:
                print(f"除数{y}是合法整数")

if __name__ == '__main__':
       
        func1()


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
除数有问题

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
除数有问题

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
除数有问题

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数

C:\Users\jacky\Desktop>



######

例子六:

#coding=utf-8

def func1():

        try:
       
                y = int(input("请输入一个除数:"))

                Result_1 = 8 / y
                print(Result_1)
       
        except:
                print(0)
               
        else:
                print(f"除数{y}是合法整数")
               
        finally:
                print("Welcome to zhuohua.")

if __name__ == '__main__':
       
        func1()
       

多次运行脚本的结果:       
C:\Users\jacky\Desktop>python xx.py
请输入一个除数:0
0
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:8.5
0
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:a
0
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个除数:4
2.0
除数4是合法整数
Welcome to zhuohua.

C:\Users\jacky\Desktop>



######

例子七:

#coding=utf-8

def func1():

        try:
                Path_1 = "D:\\1.txt"
                f_name = open(Path_1)
                f_name.close()
       
        except:
                print("文件D:\\1.txt不存在")
               
        else:
                print("文件D:\\1.txt打开成功")
                func2()
               
def func2():

        try:
                Path_1 = "D:\\2.txt"
                f_name = open(Path_1)
                f_name.close()
       
        except:
                print("文件D:\\2.txt不存在")
               
        else:
                print("文件D:\\2.txt打开成功")
       

if __name__ == '__main__':
       
        func1()


多次运行脚本的结果:

文件D:\1.txt、D:\2.txt都不存在时的结果:( 不会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt不存在

C:\Users\jacky\Desktop>


文件D:\1.txt不存在,但文件D:\2.txt存在时的结果:( 不会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt不存在

C:\Users\jacky\Desktop>


文件D:\1.txt存在,但文件D:\2.txt不存在时的结果:( 会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt打开成功
文件D:\2.txt不存在

C:\Users\jacky\Desktop>


文件D:\1.txt、D:\2.txt都存在时的结果:( 会执行func2() )
C:\Users\jacky\Desktop>python xx.py
文件D:\1.txt打开成功
文件D:\2.txt打开成功

C:\Users\jacky\Desktop>





######

例子八:(使用 raise 引发异常)

#coding=utf-8

def func1():

        if Key_1 == 'a':
                Result_1 = 8
        else:
                Result_1 = 8.8
               
        return Result_1

def func2():

        Result_2 = func1()
               
        if type(Result_2) != int:  #如果变量Result_2的数据类型不是整数,就引发异常
                raise  #默认引发的是RuntimeError异常
        else:
                print(Result_2)

if __name__ == '__main__':

        Key_1 = input("请输入一个字母:")
       
        func1()
        func2()
       
        print("Welcome to zhuohua.") #异常引发后的代码不会执行


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
Traceback (most recent call last):
  File "xx.py", line 26, in <module>
    func2()
  File "xx.py", line 17, in func2
    raise
RuntimeError: No active exception to reraise

C:\Users\jacky\Desktop>



######

例子九:(使用 raise 引发异常)

#coding=utf-8

def func1():

        if Key_1 == 'a':
                Result_1 = 8
        else:
                Result_1 = 8.8
               
        return Result_1

def func2():

        Result_2 = func1()
               
        if type(Result_2) != int:  #如果变量Result_2的数据类型不是整数,就引发TypeError异常
                print("结果的数据类型不是整数!")
                raise TypeError
        else:
                print(Result_2)

if __name__ == '__main__':

        Key_1 = input("请输入一个字母:")
       
        func1()
        func2()
       
        print("Welcome to zhuohua.") #异常引发后的代码不会执行


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
结果的数据类型不是整数!
Traceback (most recent call last):
  File "xx.py", line 27, in <module>
    func2()
  File "xx.py", line 18, in func2
    raise TypeError
TypeError

C:\Users\jacky\Desktop>



######

例子十:( try + raise )

#coding=utf-8

def func1():

        if Key_1 == 'a':
                Result_1 = 8
        else:
                Result_1 = 8.8
               
        return Result_1

def func2():

        Result_2 = func1()
               
        try:
       
                if type(Result_2) != float:  #如果变量Result_2的数据类型不是浮点数,就引发TypeError异常
                        raise TypeError("结果的数据类型不是浮点数!")
                else:
                        print(Result_2)
                       
        except TypeError as e:
                print("引发异常:",repr(e))

if __name__ == '__main__':

        Key_1 = input("请输入一个字母:")
       
        func1()
        func2()
       
        print("Welcome to zhuohua.")  #使用了try语句,异常引发后的代码会继续执行


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
8.8
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
引发异常: TypeError('结果的数据类型不是浮点数!',)
Welcome to zhuohua.

C:\Users\jacky\Desktop>



######

例子十一:( try + raise )

#coding=utf-8

def func1():

        if Key_1 == 'a':
                Result_1 = 8
        else:
                Result_1 = 8.8
               
        return Result_1

def func2():

        Result_2 = func1()
               
        try:
       
                if Result_2 != 8:  #如果变量Result_2的值不等于8,就引发ValueError异常
                        raise ValueError("结果不等于8")
                else:
                        print(Result_2)
                       
        except ValueError as e:
                print("引发异常:",repr(e)) #有两种显示方式,可任选一种
                print("引发异常:",e)

if __name__ == '__main__':

        Key_1 = input("请输入一个字母:")
       
        func1()
        func2()
       
        print("Welcome to zhuohua.")


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入一个字母:a
8
Welcome to zhuohua.

C:\Users\jacky\Desktop>python xx.py
请输入一个字母:b
引发异常: ValueError('结果不等于8',)
引发异常: 结果不等于8
Welcome to zhuohua.

C:\Users\jacky\Desktop>





######

例子十二:( try + raise )

#coding=utf-8

def func1():

        try:
       
                if len(Key_1) < 5:
                        raise RuntimeError("密码长度不够5位数")
                else:
                        print("密码长度达到要求")
                       
        except RuntimeError as e:
                print(repr(e))
               
if __name__ == '__main__':

        Key_1 = input("请输入密码:")
        func1()
       

多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入密码:123
RuntimeError('密码长度不够5位数',)

C:\Users\jacky\Desktop>python xx.py
请输入密码:12345
密码长度达到要求

C:\Users\jacky\Desktop>python xx.py
请输入密码:12345a
密码长度达到要求

C:\Users\jacky\Desktop>



######

例子十三:( try + raise )

#coding=utf-8

def func1():

        try:
                func2()
        except RuntimeError as e:
                print(e)
                #print(repr(e))
               
def func2():
       
        if len(Key_1) >= 5:
                print("密码长度达到要求")
        else:
                e = RuntimeError("密码长度不够5位数")
                raise e
       
if __name__ == '__main__':

        Key_1 = input("请输入密码:")
        func1()


多次运行脚本的结果:
C:\Users\jacky\Desktop>python xx.py
请输入密码:123
密码长度不够5位数

C:\Users\jacky\Desktop>python xx.py
请输入密码:12345
密码长度达到要求

C:\Users\jacky\Desktop>python xx.py
请输入密码:12345a
密码长度达到要求

C:\Users\jacky\Desktop>





相关文章:
retry装饰器
自定义函数
自定义类

if语句
Python3脚本管理Linux下的MySQL
Python3检测文件内容中是否包含关键字
Python3根据文件名搜索文件

CentOS6使用Socket(检测TCP端口)
Windows使用tcping+任务计划

返回列表