Python面向对象:异常处理和eval函数简介

一、异常处理和raise异常

1.异常の概念

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

程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常

2.异常处理

直接上代码:



1.异常捕获的语法

try:
    #<正常执行的代码>
    pass
except:
    #<出现异常执行的代码>
    pass


2.捕获不同的错误类型

try:
    #<正常执行的代码>
    pass
except < 错误类型1 >:
    #<出现错误1执行的代码>
    pass
except < 错误类型2, 错误类型3 >:
    # <出现错误2或者错误3执行的代码>
    pass
except Exception as result:
    print("未知错误类型:{}".format(result))


3.完整的异常捕获语法

try:
    #正常执行的代码
    pass
except <错误1>:
    #抛出错误1时执行的代码
    pass
except <错误2>:
    #抛出错误2时执行的代码
    pass
except <错误3, 错误4>:
    #抛出错误3或者错误4时执行的代码
    pass
except Exception as result:
    print("未知错误类型:{}".format(result))
else:
    #没有异常才会执行的代码
    pass
finally:
    #无论是否有异常都会执行的代码
    print("程序结束")

3.异常的传递

  • 异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方
  • 如果 传递到主程序,仍然 没有异常处理,程序才会被终止

注意:

在开发中,可以在主函数中增加 异常捕获,这样在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中

这样就不需要在代码中,增加大量的 异常捕获,能够保证代码的整洁

def demo1():
    return int(input("请输入一个整数:"))


def demo2():
    return demo1()

def main():
    try:
        print(demo2())
    except ValueError:
        print("请输入正确的整数")
    except Exception as result:
        print("未知错误 %s" % result)

main()

上面的示例中只在主函数中添加了异常捕获,这样也可以检测到来自demo1和demo2中的异常信息

4.抛出raise异常

Python 中提供了一个 Exception异常类

如果在满足特定需求时,希望抛出异常,则:

  1. 创建一个 Exception 的对象
  2. 使用 raise 关键字 抛出异常对象

示例:

  • 定义 input_password 函数,提示用户输入密码
  • 如果用户输入长度 < 8,抛出异常
  • 如果用户输入长度 >=8,返回输入的密码
def input_password():

    # 1. 提示用户输入密码
    pwd = input("请输入密码:")

    # 2. 判断密码长度,如果长度 >= 8,返回用户输入的密码
    if len(pwd) >= 8:
        return pwd

    # 3. 密码长度不够,需要抛出异常
    # 1> 创建异常对象 - 使用异常的错误信息字符串作为参数
    ex = Exception("密码长度不够")

    # 2> 抛出异常对象
    raise ex


try:
    user_pwd = input_password()
    print(user_pwd)
except Exception as result:
    print("发现错误:%s" % result)

二、eval函数简介

eval() 函数十分强大 —— 将 字符串 当成 有效的表达式 来求值 并 返回计算结果 

个人理解:有去括号的功能,转变成相关形式

# 基本的数学计算
eval("1 + 1")
#输出:
2

# 字符串重复
eval("'*' * 10")
#输出:
'**********'

# 将字符串转换成列表
type(eval("[1, 2, 3, 4, 5]"))
#输出:
[1, 2, 3, 4, 5]

# 将字符串转换成字典
type(eval("{'name': 'xiaoming', 'age': 18}"))
#输出:
{'name': 'xiaoming', 'age': 18}

实例:计算加减乘除的计算器

str = input("输入算式:")
print(eval(str))

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/86775629