前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3断言和常见异常

Python3断言和常见异常

原创
作者头像
织幻妖
修改2021-03-03 18:02:44
1.2K0
修改2021-03-03 18:02:44
举报

python 断言

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况

代码演示:

代码语言:javascript
复制
a = 3
assert(a>1)
print("断言成功,程序继续向下执行")
print("a执行")
b = 7
assert(b>10)
print("断言失败,程序报错")
print("b执行")

执行结果:

代码语言:javascript
复制
断言成功,程序继续向下执行
a执行
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 6, in <module>
    assert(b>10)
AssertionError

我们看到,当条件为true时,断言成功,程序会继续向下执行。当条件为 false 触发异常,断言失败,程序报错

如果我们将断言失败的放在上面,a是否还会执行

代码演示:

代码语言:javascript
复制
b = 7
assert(b>10)
print("断言失败,程序报错")
print("b执行")
a = 3
assert(a>1)
print("断言成功,程序继续向下执行")
print("a执行")

执行结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 2, in <module>
    assert(b>10)
AssertionError

可以看到,当断言失败的时候,程序将不会再执行下面的代码。

python 常见异常

Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

异常都不会被程序处理,都以错误信息的形式展现出来

1.ZeroDivisionError

0 不能作为除数,触发的异常

代码演示:

代码语言:javascript
复制
a = 1/0
print(a)

执行结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 1, in <module>
    a = 1/0
ZeroDivisionError: division by zero

2.TypeError

不同类型的数据相加,触发的异常

代码演示:

代码语言:javascript
复制
a = 3
b = '5'
c = a + b
print(c)

执行效果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 3, in <module>
    c = a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'

int 不能与 str 相加,触发异常

3.NameError

字符未定义,触发的异常

代码演示:

代码语言:javascript
复制
a = 3
b = s + 5
c = a + b
print(c)

执行结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 2, in <module>
    b = s + 5
NameError: name 's' is not defined

4.SyntaxError

语法错误,引发的异常

代码演示:

代码语言:javascript
复制
while True print('你好')

执行结果:

代码语言:javascript
复制
 File "D:/PycharmProjects/python/zidian.py", line 1
    while True print('你好')
               ^
SyntaxError: invalid syntax

上面:函数 print() 被检查到有错误,是它前面缺少了一个冒号 :

语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。

5.FileNotFoundError

打开不存在的文件,引发的异常

代码演示:

代码语言:javascript
复制
f=open('notfound.txt', 'r')

执行结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 1, in <module>
    f=open('notfound.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'notfound.txt'

6.ValueError

值错误。引发的异常

代码演示:

代码语言:javascript
复制
a = int("www.baidu.com")
print(a)

执行结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 1, in <module>
    a = int("www.baidu.com")
ValueError: invalid literal for int() with base 10: 'www.baidu.com'

异常处理

try/except

异常捕捉可以使用try/except语句

代码演示:

代码语言:javascript
复制
while True:
    try:
        x = int(input("请输入一个数字: "))
        break
    except ValueError:
        print("您输入的不是数字,请再次尝试输入!")

执行效果:

代码语言:javascript
复制
请输入一个数字: python
您输入的不是数字,请再次尝试输入!
请输入一个数字: 6

try/except...else

try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。

else 子句将在 try 子句没有发生任何异常的时候执行

代码演示:

代码语言:javascript
复制
s = input('请输入除数:')
try:
    result = 20 / int(s)
    print('20除以%s的结果是: %g' % (s , result))
except ValueError:
    print('值错误,您必须输入数值')
except ArithmeticError:
    print('算术错误,您不能输入0')
else:
    print('没有出现异常')

执行结果:

代码语言:javascript
复制
请输入除数:10
20除以10的结果是: 2
没有出现异常
代码语言:javascript
复制
请输入除数:0
算术错误,您不能输入0

try-finally

try-finally 语句无论是否发生异常都将执行最后的代码。

代码演示:

代码语言:javascript
复制
s = input('请输入除数:')
try:
    result = 20 / int(s)
    print('20除以%s的结果是: %g' % (s , result))
except ValueError:
    print('值错误,您必须输入数值')
except ArithmeticError:
    print('算术错误,您不能输入0')
else:
    print('没有出现异常')
finally:
    print('这句话,无论异常是否发生都会执行。')

执行效果:

代码语言:javascript
复制
请输入除数:10
20除以10的结果是: 2
没有出现异常
这句话,无论异常是否发生都会执行。
代码语言:javascript
复制
请输入除数:0
算术错误,您不能输入0
这句话,无论异常是否发生都会执行。

抛出异常

Python 使用 raise 语句抛出一个指定的异常。

代码演示:

代码语言:javascript
复制
a = 10
if a > 5:
    raise Exception('a 不能大于5。a的值为: {}'.format(5))

执行效果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:/PycharmProjects/python/zidian.py", line 3, in <module>
    raise Exception('a 不能大于5。a的值为: {}'.format(5))
Exception: a 不能大于5。a的值为: 5

raise 唯一的一个参数指定了要被抛出的异常。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python 断言
    • Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
      • 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况
      • python 常见异常
        • Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。
          • 1.ZeroDivisionError
            • 0 不能作为除数,触发的异常
          • 2.TypeError
            • 不同类型的数据相加,触发的异常
          • 3.NameError
            • 字符未定义,触发的异常
          • 4.SyntaxError
            • 语法错误,引发的异常
          • 5.FileNotFoundError
            • 打开不存在的文件,引发的异常
          • 6.ValueError
            • 值错误。引发的异常
        • 异常处理
          • try/except
            • 异常捕捉可以使用try/except语句
          • try/except...else
            • try/except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。
            • else 子句将在 try 子句没有发生任何异常的时候执行
          • try-finally
            • try-finally 语句无论是否发生异常都将执行最后的代码。
            • Python 使用 raise 语句抛出一个指定的异常。
        • 抛出异常
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档