Python 错误和异常

错误和异常

错误

  • 语法错误(syntax error)

  • 逻辑错误(logic error)

  • 执行期间错误(runtime error)

    • Demo:
  • for i in range(10)
        print(i)
      
      
      
       for i in range(10)
                         ^
    SyntaxError: invalid syntax
    
    

python的语法分析器完成,检测到错误所在的文件和行号,以向上箭头标记错误位置,最后显示错误类型

当程序检测到一个错误,解释器就无法继续执行下去,抛出异常,终止程序

异常

系统根据不同的错误,抛出不同的异常

常见异常:

print(1/0)

ZeroDivisionError: division by zero
a=10
print(a)
print(b)

NameError: name 'b' is not defined
li = [1,2,3]
print(li[3])

IndexError: list index out of range
dic = {'name':'tom'}
print(dic['age'])


KeyError: 'age'
f =open('txt.txt')


FileNotFoundError: [Errno 2] No such file or directory: 'txt.txt'
a = 20


   a = 20
    ^
IndentationError: unexpected indent

异常处理

程序一旦发生错误,程序就无法继续运行

try…except…

try:
    try_starements
except [exceptionType[as identifier]]:
    except_statements
[else:
    else_statements]

[finally:
    finally_statements]
try:
    X = eval(input('请输入被除数x:\t'))
    Y = eval(input('请输入除数y:\t'))
    Z = X/Y
except ZeroDivisionError:
    print('除数不可以为0.')
except NameError:
    print('请检查变量是否赋值。')
except Exception as e:
    print(e.args)
else:
    print('未捕捉到异常,X/Y=',Z)
finally:
    print('离开try...except模块。')
    
    
    
请输入被除数x:	4
请输入除数y:	0
除数不可以为0.
离开try...except模块。
请输入被除数x:	4
请输入除数y:	b
请检查变量是否赋值。
离开try...except模块。
请输入被除数x:	4
请输入除数y:	2
未捕捉到异常,X/Y= 2.0
离开try...except模块。
请输入被除数x:	12
请输入除数y:	4,
("unsupported operand type(s) for /: 'int' and 'tuple'",)
离开try...except模块。

raise(触发异常)

除了系统抛出的异常,我们可以用raise语句自己触发异常。

格式:

raise [Exception[,args[,traceback]]]
  • Exception:异常类型

  • args:我们自己提供的异常参数

  • Traceback:可选,如果存在,跟踪异常现象

  • raise NameError('sorry,Error Occurs')
    
    
    Traceback (most recent call last):
      File "/Users/xujiaqi/PycharmProjects/untitled5/7yue.py", line 21, in <module>
        raise NameError('sorry,Error Occurs')
    NameError: sorry,Error Occurs
    
    

将自己触发的异常异常处理:

try:
    raise NameError('sorry,Error Occurs')
except NameError:
    print('捕捉到异常。')
    
    
捕捉到异常。

assert(断言)

assert condition

逻辑上相当于:

if not condition:
  raise AssertionError()

为断言添加一个异常参数

assert expression[,args]

Arguments

li = [1, 5]
assert len(li) >= 5, '列表元素个数小于5'


Traceback (most recent call last):
  File "/Users/xujiaqi/PycharmProjects/untitled5/7yue.py", line 26, in <module>
    assert len(li) >= 5, '列表元素个数小于5'
AssertionError: 列表元素个数小于5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值