python编程基础——错误和异常

语法错误

语法错误又称解析错误,是python学习中最常遇到的错误:

    def fuc
          ^
SyntaxError: invalid syntax

解析器会输出出现语法错误的那一行,并显示一个“箭头”,指向这行里面检测到第一个错误。 (此例为函数缺少 ‘:’)



异常

常见的异常

异常 描述
NameError 尝试访问一个没有申明的变量
ZeroDivisionError 除数为0
SyntasError 语法错误
IndexError 索引超出序列范围
KeyError 请求一个不存在的字典关键字
IOError 输入/输出错误
AttributeError 尝试访问位置的对象属性

  • NameError
#未对变量绑定对象直接使用.
   n
NameError: name 'n' is not defined

  • ZeroDivisionError
#零作分母
    1/0
ZeroDivisionError: division by zero

  • SyntaxError
#函数没有冒号
    def fuc
          ^
SyntaxError: invalid syntax

  • IOError
#打开不存在的文件
    f = open("text")

FileNotFoundError: [Errno 2] No such file or directory: 'text'

  • AttributeError
#使用未定义的属性
    a.m
AttributeError: 'A' object has no attribute 'm'


处理异常

为了保证代码的健壮性,有时我们需要对一些由用户操作不当而引起的一些异常做处理。这就需要用到异常处理语句。


try…except…

对于try...except...语句,如果try子语句有异常发生,则直接跳到except部分。下面我们对于该语句的几种情况来:

  • 不管什么异常,都执行except
#except后不跟任何异常类型
try:
    1/0
except:
    print("分母不能为零")

  • 执行指定异常
# 产生的异常不是 except语句后跟的异常
try:
    1/0
except IOError:
    print("IOError错误")
# 运行结果
    1/0
ZeroDivisionError: division by zero

#产生的异常是except语句后跟的异常
try:
    1/0
except ZeroDivisionError:
    print("ZeroDivisionError错误")
#运行结果
ZeroDivisionError错误

  • 多个except
# 有多个except,try里面遇到一个异常,就转到相应的except子句
try:
    a
except ZeroDivisionError:
    print("ZeroDivisionError错误")
except NameError:
    print("NameError错误")
# 运行结果
NameError错误

#当然这样也是可以的
try:
    a
except (ZeroDivisionError,NameError):
    print("ZeroDivisionError或NameError错误")
# 运行结果
ZeroDivisionError或NameError错误

  • 打印默认错误提示
# 对于单个异常
try:
    1/0
except ZeroDivisionError as error:
    print(error)

#对于多个异常
try:
    1/0
except (ZeroDivisionError,IOError) as error:
    print(error)

#对于所有异常
try:
    1/0
except Exception as error:
    print(error)

#运行结果  
division by zero


else子句

除了try...except...句式以外,还有try...except...else...,之行过程是如果try子句能后正常运行,那么就执行else子句。

try:/except Exception as error:
    print(error)
else:
    print("try子句成功运行")
# 1/0输出结果
division by zero
#2/1输出结果
try子句成功运行

下面给出一个关于else的例子,计算两数和

while True:
    a=input("请输入A:")
    b=input("请输入B:")
    try:
        c=int(a)/int(b)
    except Exception as ex:
        print("输入有误:",ex)
    else:
        print("结果为:",c)
        break
#输出结果
请输入A:2
请输入B:0
输入有误: division by zero
请输入A:2
请输入B:1
结果为: 2.0


finally子句

有了finally,不管前面执行的是try,还是except,最终都要之行它。因此我们可以利用finally做一些收尾善后的工作。值得注意点是:**当tryexcept中有return时,在执行到return之前会跳转至finally子句执行,直至执行完。

def func(a,b):
    try:
        a/b
        print("try子句")
        return 0
    except:
        print("except子句")
        return 1
    finally:
        print("finally子句")
        return 2
print(func(1,0))
print(func(1,1))
#运行结果
except子句
finally子句
2
try子句
finally子句
2

#若把finally中的return去掉,则输出为
except子句
finally子句
1
try子句
finally子句
0


assert语句

assert主要用来判断真假,如果为真则正常执行,如果为假则抛出异常。

assert True #正常执行
assert False #抛出异常
def func(a,b):
    try:
        assert a==b
        print("两数相等")
    except:
        print("两数不等")
func(1,0)
func(1,1)
#输出结果
两数不等
两数相等
发布了19 篇原创文章 · 获赞 19 · 访问量 3610

猜你喜欢

转载自blog.csdn.net/qq_36733722/article/details/102642931