(九)Python基础知识-语法错误和异常

1、语法错误

语法错误是我们在编写程序时,缺少一些关键字或者符号,直接导致程序编译都无法通过,会报SyntaxError错误。

举个例子:

if True
    print("上述语句有1处语法错误:缺少关键符号(冒号:)")

输出结果:
在这里插入图片描述
可以很明显的看到 if True 后面缺少一个:号,这些都是python语法规定的,如果继续运行程序会报SyntaxError错误,这就是所谓的语法错误。
其实发生语法错误时,很多时候PyCharm编译器会自动标红提示,而不必等到运行之后发现。

2、异常

异常是指,程序语法是正确的,但是在运行的时候发生了错误,导致程序可能意外终止,这个错误可以理解为异常,这种异常需要进行捕获处理。
关于捕获异常,主要有以下三种处理方式:

  • try except 捕获语句
  • raise 抛出语句
  • assert(断言)语句

2.1、try except 捕获语句

try except捕获语句有多种结构。

2.1.1、第一种:

语句结构:

try:
	# 执行语句
except Exception:
	# 发生异常时执行的语句

举个例子:

try:
    numer = 1
    print("12" + numer)
except TypeError:
    print("发生异常时执行的语句")

输出:

发生异常时执行的语句

其中TypeError是可以改变为其他的异常类型

2.1.2、第二种:

语句结构:

try:
    # 执行语句
except Exception:
    # 发生异常时执行的语句
else:
    # 没有异常时执行的语句

举个例子:

try:
    numer = 1
    print("12" + numer)
except TypeError:
    print("发生异常时执行的语句")
else:
    print("没有异常时执行的语句")

输出:

发生异常时执行的语句

读者可以将上面的+号改成,号,即可看到执行else分支里面打印信息。

2.1.3、第三种:

语句结构:

try:
    # 执行语句
except Exception:
    # 发生异常时执行的语句
else:
    # 没有异常时执行的语句
finally:
    # 不管有没有异常都要执行的语句

举个例子:

try:
    numer = 1
    print("12" + numer)
except TypeError:
    print("发生异常时执行的语句")
else:
    print("没有异常时执行的语句")
finally:
    print("不管有没有异常都要执行的语句")

输出:

发生异常时执行的语句
不管有没有异常都要执行的语句
2.1.4、其他捕获语句:

去掉else的语句结构:

try:
    # 执行语句
except Exception:
    # 发生异常时执行的语句
finally:
    # 不管有没有异常都要执行的语句

支持元组异常类型捕获的语句结构:

try:
    # 执行语句
except (Exception1, Exception2, Exception3):
    # 发生异常时执行的语句

支持多个异常类型捕获的语句结构:

try:
    # 执行语句
except Exception1:
    # 发生异常时执行的语句
except Exception2:
    # 发生异常时执行的语句
    ...
2.2、raise 抛出语句

语句结构:

raise Exception (msg)

msg:抛出的字符串信息
举个例子:

# 定义一个除法函数
def div(agr1, arg2):
    if arg2 == 0:
        raise ZeroDivisionError("除数不能为0")
    return agr1 / arg2


# 调用除法函数捕获div函数上抛的异常
try:
    res = div(1, 0)
    print(res)
except ZeroDivisionError as ex:
    print("捕获异常:", ex.args[0])

输出:

捕获异常: 除数不能为0

raise可以用来抛出自定义的异常,关于自定义异常需要学习面向对象后再来举例。

2.3、assert(断言)语句

语句结构:

assert expression

assert(断言)语句用于判断一个表达式,在表达式条件为 false 的时候触发异常。
断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况。
在Android里面可以用断言函数做单元测试。

举个例子:

#断言函数举例
assert 1<2    # 条件为 true 正常执行
print("1比2小")
assert 1>2    # 条件为 false 触发异常 
print("1比2大")

print("判断结束")

输出:
在这里插入图片描述
可以看出:
第一个断言语句,返回true,打印出了结果;
第二个断言语句,返回false,直接触发AssertionError异常,程序终止,不再往下执行。

3、总结

其实异常的捕获与java非常之类似,且可以在except后跟异常元组这个用法确实比较厉害;
其次else分支也算是Python独有的吧;
raise更多适用于自定义异常的场景;
对于断言语句第一次在Python中了解了它的用法,之前在java中还没有怎么使用过。

文中关于 TypeError 、AssertionError、NameError 这些类似的异常类的介绍暂未罗列出来,在实践中慢慢探索吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值