异常和作用域

异常

定义

语法

Try – except-else

"""

 try -except-else

 try:

      代码块

 except <错误的名字(可写可不写)>:

       代码块

 ...........

 else:

       代码块

可以把else去掉

try:

      代码块

 except <错误的名字(可写可不写)>:

       代码块

注意:1.try不能单独使用

     2.错误的名字(可写可不写)

运行结果:

   报错(除数是0),运行的是except

   不报错(除数不是0),运行的是else

"""

try:

      s = eval(input("请输入一个数字:"))

      a = 10/s

except ZeroDivisionError:

      print("除数不能是零")

else:

      print("除数是正常的,运行成功")

Try-finally

"""

Try-finally

  try:

     代码块

  finally:

      代码块

执行结果:

  无论报不报错最终都会执行

"""

#control+c

try:

      s= input("请输入内容")

finally:

      print("异常退出")

Raise关键字

"""

 raise:无论代码是否异常,他自己会触发异常

 语法:

  raise 异常名称

"""

try:

      s = eval(input("请输入一个除数:"))

      a = 10/s

      #无论你的除数等不等于0,他都会报错

      raise ZeroDivisionError

except ZeroDivisionError:

      #except是异常的时候给出的警告

      print("警告:除数不能为0")

"""

请输入一个除数:3

警告:除数不能为0

"""

常见的异常列表(要求再认)

BaseException

所有异常的基类

SystemExit

解释器请求退出

KeyboardInterrupt

用户中断执行(通常是输入^C)

Exception

常规错误的基类

StopIteration

迭代器没有更多的值

GeneratorExit

生成器(generator)发生异常来通知退出

StandardError

所有的内建标准异常的基类

ArithmeticError

所有数值计算错误的基类

FloatingPointError

浮点计算错误

ValueError

传入无效的参数

ZeroDivisionError

除(或取模)零 (所有数据类型)

KeyError

映射中没有这个键

AttributeError

对象没有这个属性

作用域

是按照变量的查找顺序 L>E>G>B

L(local) 局部作用域

"""

L(local) 局部作用域

"""

def func():

      #a是函数中的变量,是局部变量,只能在函数中使用

      a=10

      print(a)

#a是不存在的

print(a)

E(Enclosing) 闭包函数中的作用域

  nonlocal  :把闭包外的变量引用过来

#刚出生的年龄,是全局变量,意味这谁都是从这个年龄开始的

age = 1

def qunian():

      #闭包外的变量,局部变量  4-11能用

      age = 19

      def jinian():

            """

            #把全局变量引用过来,那么就是把age=1引用过来

            global age

            我们想要引用的是闭包外面的变量

            nonlocal  :把闭包外的变量引用过来

            """

            nonlocal age

            #闭包里面的变量 ,局部变量 7-9行能用

            age=age +1

            print("今年的年龄",age)

      print("去年的年龄",age)

      return jinian



#qunian()返回的是return jinian

jinian = qunian()

#所以还要调用一下今年这个函数jinian()

jinian()

#今年的年龄 20

G(Global) 全局作用域

global  把全局的age引用过来

"""

G(Global) 全局作用域

"""

#全局

age = 20

def func():

      #把全局的age引用过来

      global age

      #局部

      #前面的a相当于是重新赋值的a,是局部的

      #后面的a是要进行相加的数据,所以要有这个数据,所以是全局的

      age=1 + age

      return age

      

print(func()) #30

B(Built-in) 内建作用域

系统固定模块里面的变量,比如 int, bytearray 等。

比如函数名 abs、char 和异常名称 BaseException、Exception 等等。

总结

是按照变量的查找顺序 L>E>G>B

逐渐扩大范围去寻找

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值