python 常用语法及命令(五) 异常(try catch) assert else with

Python异常

1、Python标准异常总结


AssertionError                断言语句(assert)失败
AttributeError                   尝试访问未知的对象属性
EOFError                              用户输入文件末尾标志EOF(Ctrl+d)
FloatingPointError           浮点计算错误
GeneratorExit                    generator.close()方法被调用的时候
ImportError                        导入模块失败的时候
IndexError                           索引超出序列的范围
KeyError                                字典中查找一个不存在的关键字
KeyboardInterrupt           用户输入中断键(Ctrl+c)
MemoryError                      内存溢出(可通过删除对象释放内存)
NameError                           尝试访问一个不存在的变量
NotImplementedError    尚未实现的方法
OSError                                  操作系统产生的异常(例如打开一个不存在的文件)
OverflowError                       数值运算超出最大限制
ReferenceError                   弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
RuntimeError                      一般的运行时错误
StopIteration                      迭代器没有更多的值
SyntaxError                         Python的语法错误
IndentationError                缩进错误
TabError                                 Tab和空格混合使用
SystemError                          Python编译器系统错误
SystemExit                             Python编译器进程被关闭
TypeError                               不同类型间的无效操作
UnboundLocalError           访问一个未初始化的本地变量(NameError的子类)
UnicodeError                         Unicode相关的错误(ValueError的子类)
UnicodeEncodeError          Unicode编码时的错误(UnicodeError的子类)
UnicodeDecodeError          Unicode解码时的错误(UnicodeError的子类)
UnicodeTranslateError      Unicode转换时的错误(UnicodeError的子类)
ValueError                               传入无效的参数
ZeroDivisionError                除数为零


2、检测异常 try-except

1>用法:

try:

        检测范围

except Exception[as reason]:

       出现异常后的处理代码   

>>> try:	
	f =open('我为什么是个文件.txt')
	print(f.read())
	f.close()
except OSError:
	print('文件出错')

	
文件出错
>>> try:	
	f =open('我为什么是个文件.txt')
	print(f.read())
	f.close()
except OSError as reason:
	print('文件出错\n错误的原因是: '+ str(reason))

	
文件出错
错误的原因是: [Errno 2] No such file or directory: '我为什么是个文件.txt'
>>> try:
	sum = 1 + '1'
	f =open('我为什么是个文件.txt')
	print(f.read())
	f.close()
except OSError as reason:
	print('文件出错\n错误的原因是: '+ str(reason))
except TypeError as reason:
	print('类型出错\n错误的原因是: ' + str(reason))

	
类型出错
错误的原因是: unsupported operand type(s) for +: 'int' and 'str'

2>捕获所有异常

   

>>> try:
	int('abc')
	sum = 1 + '1'
	f = open('这是一个文件.txt')
	print(f.read())
	f.close()
except:
	print('出错啦T_T')

	
出错啦T_T
>>> try:
	sum = 1 + '1'
	f = open('这是一个文件.txt')
	print(f.read())
	f.close()
except (OSError, TypeError):
	print('出错啦T_T')

	
出错啦T_T

finally

try:

        检测范围

except Exception[as reason]:

       出现异常后的处理代码   

finally

      无论如何都会被执行的代码

>>> try:
	sum = 1 + '1'
	f = open('这是一个文件.txt')
	print(f.read())
	f.close()
except (OSError, TypeError):
	print('出错啦T_T')
finally:
	print('出错也执行')

	
出错啦T_T
出错也执行

3>raise 引发异常

def mye( level ):
    if level < 1:
        raise Exception("Invalid level!")
        # 触发异常后,后面的代码就不会再执行
try:
    mye(0)            # 触发异常
except Exception as err:
    print(1,err)
else:
    print(2)
>>> 1/0
Traceback (most recent call last):
  File "<pyshell#1163>", line 1, in <module>
    1/0
ZeroDivisionError: division by zero
>>> raise ZeroDivisionError
Traceback (most recent call last):
  File "<pyshell#1164>", line 1, in <module>
    raise ZeroDivisionError
ZeroDivisionError
>>> raise ZeroDivisionError("异常:除数为0")
Traceback (most recent call last):
  File "<pyshell#1165>", line 1, in <module>
    raise ZeroDivisionError("异常:除数为0")
ZeroDivisionError: 异常:除数为0

 

else

  python中else除了可以跟if一起使用,还可以跟while,for配合,while顺利完成才执行else,如果被break中断则不执行else

def showMaxFactor(num):
    count = num//2
    while count >1:
    	if num % count == 0:
    		print('%d最大的约数是%d '% (num, count))
    		break
    	count -= 1

    else:
    	print('%d是素数!' %num)

num = int(input('请输入一个数:'))
showMaxFactor(num)

else 和异常一起使用,try没有异常,才执行else

try:	
	print(int('abc'))
except ValueError as reason:
	print('出错: '+ str(reason))
else:
	print('没有异常')

	
出错: invalid literal for int() with base 10: 'abc'

with语句

with可以自动调用 f.close()

try:
	with open('data.txt','w') as f:
		for each_line in f:
			print(each_line)
except OSError as reason:
	print('出错啦:' + str(reason))

	
出错啦:[Errno 13] Permission denied: 'data.txt'

不然要手动关闭

try:
	f =  open('data.txt','w') 
	for each_line in f:
		print(each_line)
except OSError as reason:
	print('出错啦:' + str(reason))
finally:
	f.close()

	
出错啦:[Errno 13] Permission denied: 'data.txt'

assert 断言

来自(https://blog.csdn.net/xufive/article/details/102856921)

断言就是声明表达式的布尔值必须为真的判定,否则将触发 AssertionError 异常。

严格来讲,assert是调试手段,不宜使用在生产环境中,但这不影响我们用断言来实现一些特定功能,比如,输入参数的格式、类型验证等。

>>> def i_want_to_sleep(delay):
	assert(isinstance(delay, (int,float))), '函数参数必须为整数或浮点数'
	print('开始睡觉')
	time.sleep(delay)
	print('睡醒了')

	
>>> i_want_to_sleep(1.1)
开始睡觉
睡醒了
>>> i_want_to_sleep(2)
开始睡觉
睡醒了
>>> i_want_to_sleep('2')
Traceback (most recent call last):
  File "<pyshell#247>", line 1, in <module>
    i_want_to_sleep('2')
  File "<pyshell#244>", line 2, in i_want_to_sleep
    assert(isinstance(delay, (int,float))), '函数参数必须为整数或浮点数'
AssertionError: 函数参数必须为整数或浮点数

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值