工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这个文件可能不存在或者文件格式不对;程序在运行着,但是内存或硬盘可能满了等等。
抛出异常: 在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器。捕获异常: 解释器得到该异常后,寻找相应的代码来处理该异常
在日常生活中,我们随时随地都有可能会遇到异常,怎么处理呢?
try :被监控的可能引发异常的语句块except BaseException [ as e ]:异常处理语句块① try 块包含着可能引发异常的代码, except 块则用来捕捉和处理发生的异常。② 执行的时候,如果 try 块中没有引发异常,则跳过 ecept 块继续执行后续代码;③执行的时候,如果 try 块中发生了异常,则跳过 try 块中的后续代码,跳到相应的 except 块中处理异常;异常处理完后,继续执行后续代码。
代码:
try:
print("step1")
a = 3/0
print("step2")
except BaseException as e:
print("step3")
print(e)
print("step4")
try :被监控的、可能引发异常的语句块except Exception1 :处理 Exception1 的语句块except Exception2 :处理 Exception2 的语句块[...]except BaseException :处理可能遗漏的异常的语句块
实例代码:
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常:除数不能为0")
except TypeError:
print("异常:除数和被除数都应该为数值类型")
except BaseException as e:
print(e)
print(type(e))
示例代码:
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except BaseException as e:
print(e)
else:
print("除的结果是:", c)
try:
a = input("请输入被除数:")
b = input("请输入除数:")
c = float(a)/float(b)
print(c)
except BaseException as e:
print(e)
else:
print("除的结果是:", c)
finally:
print("我是finally中的语句,无论发生异常与否,都执行!")
print("程序结束!")
def test01():
print("step1")
try:
x = 3/0 # return "a"
except:
print("step2")
print("异常:0不能做除数")#return "b"
finally:
print("step4")
#return "d"
print("step5")
return "e" #一般不要将return语句放到try、except、else、finally块中,会发生一些意想不到的错误。建议放到方法最后。
print(test01())
int a = 3^SyntaxError : invalid syntax
print ( a )NameError : name 'a' is not defined
a = 3 / 0ZeroDivisionError : division by zero
float ( "jihui" )ValueError : could not convert string to float : 'jihui'
123 + "abc"TypeError : unsupported operand type ( s ) for + : 'int' and 'str'
a = { 'name' : "jihui" , 'age' : 18 }a [ 'salary' ] KeyError : 'salary'
a = [ 4 , 5 , 6 ]a [ 10 ]IndexError : list index out of range
class AgeError(Exception): #继承Exception
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo = errorInfo
def __str__(self):
return str(self.errorInfo)+",年龄错误!应该在1-150之间"
############测试代码################
if __name__ == "__main__":#如果为True,则模块是作为独立文件运行,可以执行测试代码
age = int(input("输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age)
else:
print("正常的年龄:",age)