异常 + 断言 + 一个类特殊成员__str__()
inp = input("input:") try: num = int(inp) print(num) except: print("fucked")
inp = input("input:") try: num = int(inp) print(num) except Exception as e: print(e)
Exception是一个错误表达,输入非字母时,比如"sss",报错,输出:invalid literal for int() with base 10: 'sss',而不是报错大红色"发生异常...."
这个print也可以自定义任何内容。
Excepttion可以捕捉所有错误,它可以换成其它捕捉具体类型的错误,比如ValueError、IndexError等:
inp = input("input:") try: num = int(inp) print(num) except ValueError as e: print(e)
这样就只能捕捉ValueError错误了,如果是发生ValueError会打印这个错误,其它错误发生则python报错大红色"发生异常....."
如果需要捕捉具体错误,但有时候捕捉的那个错误没发生,却发生了其它的错误,也需要捕捉,那就可以使用两次except:
inp = input("input:") try: num = int(inp) print(num) except ValueError as e: print(e) except Exception as e: print(e)
这样如果发生ValueError错误,我们第一个可以捕捉到,下面的Exception就不会执行了。
异常的完整结构:
try: #主代码块 pass except ValueError as e: #异常发生时,执行该块 pass else: #主代码块执行完,执行该块 pass finally: #无论异常与否,最终执行该块 pass
使用raise主动触发一个错误:
try: print("123") raise Exception("出错啦。。") except Exception as e: print(e) raise把"出错啦。。"赋值给了Exception,然后触发了一个错误,使得代码执行'except Exception as e',e的值就是raise赋的'出错啦。。'
__str__()
Exception是一个对象,对其进行赋值后,为什么可以打印出内容呢,我们print一个对象,输出的内容是:<__main__.Foo object at 0x10e6787b8>这样的内存地址,
类中如果定义了__str__()方法,就会打印该方法下的return信息描述,注意是return,如果用print会出错。就是说当print一个对象时,自动执行__str__()方法下的return中的信息
class Foo: def __init__(self,arg): self.xo = arg def __str__(self): return self.xo obj = Foo("出错啦") print(obj)
输出:出错啦
断言:assert
assert a == b
assert关键字后面跟一个条件,条件成立则代码继续往下执行,不成立抛出异常
如果a == b ,程序继续往下执行,如果不等于,则报错,可用来测试
格式 : assert+空格+要判断语句+,+报错语句:assert 1>5,"出错啦....."

浙公网安备 33010602011771号