Python基础入门:从变量到异常处理—阿里云天池

简介

python是结合了解释性、编译性、互动性和面向对象的脚本语言;特点是易于学习、易于阅读、易于维护、广泛的标准库、互动模式、可移植、可拓展、数据库、GUI编程、可嵌入;应用领域:数据分析挖掘、机器学习与深度学习、网络开发、爬虫。

变量、运算符与数据类型

注释

单行注释: #,用于注释一行

#注释内容

print("hello")
#print("world")

多行注释: ‘’’ ‘’’ 或者 “”" “”",用于注释多行

'''
注释内容1
注释内容2
'''

"""
注释内容1
注释内容2
"""

位运算

算术运算符:

示例:

# 加法:+
print(1 + 1)

# 减法: -
print(2 - 1)

# 乘法: *
print(1 * 1)

# 除法:/
print(2 / 1)

# 整除://
print(3 // 4)

# 取余:%
print(3 % 2)

# 幂:**
print(2 ** 3)

2
1
1
2.0
0
1
8

比较远算符:

# 大于:>
print(1 > 2)

# 小于:<
print(1 < 2)

# 等于:==
print(1 == 1)

# 大于等于:>=
print(1 >= 2)

# 小于等于:==
print(1 <= 2)

# 不等于:!=
print((1 != 2))

False
True
True
False
True
True

逻辑运算符:and :同时满足左右两边的条件;or:只需满足一个条件即可

#与:and
print(1 > 2 and 2 > 3)
print(1 < 2 and 2 > 3)

#或:or
print(1 < 2 or 2 > 3)
print(1 < 2 or 2 < 3)、

#非:not
print(not 1 > 2)

False
False
True
True
True

位运算:

# 按位取反:~
print(~4)

# 按位与:&
print(4 & 5)

# 按位或:|
print(4 | 5)

# 按位异或:^
print(4 ^ 5)

# 左移:<<
print(4 << 2)

# 右移:>>
print(8 >> 2)

-5
4
5
1
16
2

其他运算符:

# 是:is
print(&#39;hello&#39; is &#39;hello&#39;)

# 不是:is not
print(3 is not 5)

# 在:in
arr = [1, 2, 3, 4,]
print(2 in arr)

# 不在:not in
arr = [1, 2, 3, 4,]
print(6 not in arr)

True
True
True
True

变量与赋值

person = "人类"
print(person)

one = 1
tow = 2
three = one + tow
print(three)
print(one + tow)

oneStr = "不负韶华"
towStr = "好好学习"
print(oneStr + towStr)

人类
3
3
不负韶华好好学习

数据类型与转化

# 整型:int
a = 1024
print(a, type(a))

# 浮点型:float
a = 1024.00
print(a, type(a))

# 布尔型:bool
print(type(True))

# 字符串型:
print(type("hello"))

1024 <class 'int'>
1024.0 <class 'float'>
<class 'bool'>
<class 'str'>

print()函数

# 没有参数时,每次输出后都会换行。
str = ["hello", "world"]
for i in str:
    print(i)

# 每次输出结束都用 end 设置的参数 & 结尾,并没有默认换行。
str = ["hello", "world"]
for i in str:
    print(i, end="&")

# i 值与 'another string' 两个值之间用 sep 设置的参数 & 分割。由于 end 参数没有设置,因此默认是
# 输出解释后换行,即 end 参数的默认值为 \n 。
str = ["hello", "world"]
for i in str:
    print(i, 'another string', sep='&')
    
hello
world
hello&world&hello&another string
world&another string

位运算

原码、反码、补码

计算机内部使用补码表示。

原码:二进制表示

00 00 00 11 -> 3
10 00 00 11 -> -3

反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。

00 00 00 11 -> 3
11 11 11 00 -> -3 1

补码:正数的补码就是原码,负数的补码是反码+1。

00 00 00 11 -> 3
11 11 11 01 -> -3 

符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算

按位非操作

~ 把 num 的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。

~ 1 = 0
~ 0 = 1

按位与操作

只有两个对应位都为 1 时才为 1

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0 

按位或操作

只要两个对应位中有一个 1 时就为 1

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

按位异或操作

只有两个对应位不同时才为 1

异或操作的性质:满足交换律和结合律

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

A^B: 00 00 10 11
B^A: 00 00 10 11

按位左移操作

num << i 将 num 的二进制表示向左移动 i 位所得的值。

print(11 << 3)

00 00 10 11 -> 11
01 01 10 00 -> 88

88

按位右移操作

num >> i 将 num 的二进制表示向右移动 i 位所得的值。

print(11 >> 2)

00 00 10 11 -> 11
00 00 00 10 -> 2

2

利用位运算实现快速运算\

通过 << , >> 快速计算2的倍数问题。

# n << 1: 计算 n*2
print(2 << 1)

# n >> 1: 计算 n/2,负奇数的运算不可用
print(4 >> 1)

# n << m: 计算 n*(2^m),即乘以 2 的 m 次方
print(2 << 3)

# n >> m: 计算 n/(2^m),即除以 2 的 m 次方
print(18 >> 3)

# 1 << n: 2^n
print(1 << 4)

4
2
16
2
16

通过 ^ 快速交换两个整数。

a = 1
b = 2

a ^= b
b ^= a
a ^= b

print(a)
print(b)

2
1

通过 a & (-a) 快速获取 a 的最后为 1 位置的整数。

'''
00 00 01 01 -> 5 
&
11 11 10 11 -> -5

00 00 00 01 -> 1
'''
print(5 & -5)

1

利用位运算实现整数集合

元素与集合的操作:

a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)

集合之间的操作:

a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

条件语句

if语句

if expression:
 expr_true_suite
  1. if 语句的 expr_true_suite 代码块只有当条件表达式 expression 结果为真时才执行,否则将继续执行紧跟在该

代码块后面的语句。

  1. 单个 if 语句中的 expression 条件表达式可以通过布尔操作符 and , or 和 not 实现多重条件判断。
if 2 > 1:
    print("hello")

if 2 > 1 and 2 < 3:
    print("world")

if 2 > 1 or 2 > 3:
    print("hello")

if 2 > 1 and not 2 > 3:
    print("world")

hello
world
hello
world

if-else语句

Python 提供与 if 搭配使用的 else,如果 if 语句的条件表达式结果布尔值为假,那么程序将执行 else 语句后的代码。

if 语句支持嵌套,即在一个 if 语句中嵌入另一个 if 语句,从而构成不同层次的选择结构。Python 使用缩进而不是大括

号来标记代码块边界,因此要特别注意 else 的悬挂问题。

if 2 > 1:
    print("yes")
else:
    print("no")

#############

if 2 > 1:
    if 2 > 3:
        print("2大于1, 并且大于3")
    else:
        print("2大于1,但是不大于3")
else:
    print("2不大于1")

###########

if 2 > 1:
    if 2 > 0:
        print("2大于1, 并且大于0")
else:
    print("2不大于1")

############

if 2 > 1:
    print("2大于1")
else:
    if 2 > 3:
        print("2大于1, 并且大于3")
    else:
        print("2大于1,但是不大于3")
        
yes
2大于1,但是不大于3
2大于1, 并且大于0
2大于1

if-elif-else语句

if expression1:
    expr1_true_suite
elif expression2:
    expr2_true_suite
elif expressionN:
    exprN_true_suite
else:
    expr_false_suite

elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。

temp = input('请输入成绩:')
source = int(temp)
if 100 >= source >= 90:
    print('A')
elif 90 > source >= 80:
    print('B')
elif 80 > source >= 60:
    print('C')
elif 60 > source >= 0:
    print('D')
else:
    print('输入错误!')
    
请输入成绩:93
A

assert关键字

assert 这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛

出 AssertionError 的异常。

list = ['subgroup']
list.pop(0)
assert len(list) > 0

#程序抛出异常AssertionError

在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。

a = 10
assert a > 11

#程序抛出异常AssertionError

循环语句

while循环

while 语句最基本的形式包括一个位于顶部的布尔表达式,一个或多个属于 while 代码块的缩进语句。

while 布尔表达式:
    代码块

while 循环的代码块会一直循环执行,直到布尔表达式的值为布尔假。

如果布尔表达式不带有 <、>、==、!=、in、not in 等运算符,仅仅给出数值之类的条件,也是可以的。当 while 后写

入一个非零整数时,视为真值,执行循环体;写入 0 时,视为假值,不执行循环体。也可以写入 str、list 或任何序

列,长度非零则视为真值,执行循环体;否则视为假值,不执行循环体。

import random
guess = random.randint(0, 10)
i = 1
while True:
    print("第%d次猜" % (i))
    x = int(input())
    if guess == x:
        print("猜对了,目标数字是:", guess)
        break
    elif guess > x:
        print("小了")
    elif guess < x:
        print("大了")
        
第1次猜
5
大了
第1次猜
3
大了
第1次猜
2
猜对了,目标数字是: 2

while-else循环

while 布尔表达式:
    代码块
else:
    代码块

当 while 循环正常执行完的情况下,执行 else 输出,如果 while 循环中执行了跳出循环的语句,比如 break ,将不执

行 else 代码块的内容。

count = 0
while count < 5:
    print("%d < 5" % count)
    count = count + 1
else:
    print("%d == 5" % count)
    
0 < 5
1 < 5
2 < 5
3 < 5
4 < 5
5 == 5
count = 0
while count < 5:
    print("%d < 5" % count)
    count = count + 1
    break
else:
    print("%d == 5" % count)
    
0 < 5

for循环

for 循环是迭代循环,在Python中相当于一个通用的序列迭代器,可以遍历任何有序序列,如 str、list、tuple 等,也

可以遍历任何可迭代对象,如 dict

for 迭代变量 in 可迭代对象:
    代码块

每次循环,迭代变量被设置为可迭代对象的当前元素,提供给代码块使用。

for i in 'hello world':
    print(i, end=' ')
    
h e l l o   w o r l d 
member = ['张三', '李四', '刘德华', '刘六', '周润发']
for each in member:
    print(each)
    
张三
李四
刘德华
刘六
周润发
member = ['张三', '李四', '刘德华', '刘六', '周润发']
for i in range(len(member)):
    print(member[i])
    
张三
李四
刘德华
刘六
周润发
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key, value in dic.items():
    print(key, value, sep=':', end=' ')
  
a:1 b:2 c:3 d:4 
dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
for key in dic.keys():
    print(key, end=' ')
    
a b c d 

for-else循环

for 迭代变量 in 可迭代对象:
    代码块
else:
    代码块

当 for 循环正常执行完的情况下,执行 else 输出,如果 for 循环中执行了跳出循环的语句,比如 break ,将不执

行 else 代码块的内容,与 while - else 语句一样。

for num in range(10, 20): # 迭代 10 到 20 之间的数字
    for i in range(2, num): # 根据因子迭代
        if num % i == 0:  # 确定第一个因子
            j = num / i  # 计算第二个因子
            print('%d 等于 %d * %d' % (num, i, j))
            break  # 跳出当前循环
    else: # 循环的 else 部分
        print(num, '是一个质数')
        
10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数
14 等于 2 * 7
15 等于 3 * 5
16 等于 2 * 8
17 是一个质数
18 等于 2 * 9
19 是一个质数

range()函数

range([start,] stop[, step=1]) 

1. 这个BIF(Built-in functions)有三个参数,其中用中括号括起来的两个表示这两个参数是可选的。
2. step=1 表示第三个参数的默认值是1。 
3. range 这个BIF的作用是生成一个从 start 参数的值开始到 stop 参数的值结束的数字序列,该序列包含 start 的
值但不包含 stop 的值。
for i in range(2, 6):
    print(i)
    
2
3
4
5

for i in range(1, 10, 2):
    print(i)
    
1
3
5
7
9

enumerate()函数

enumerate(sequence, [start=0]) 

1. sequence -- 一个序列、迭代器或其他支持迭代对象。
2. start -- 下标起始位置。
3. 返回 enumerate(枚举) 对象
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons))
print(lst)

[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]


seasons = ['Spring', 'Summer', 'Fall', 'Winter']
lst = list(enumerate(seasons, start=1)) # 下标从 1 开始
print(lst)

[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

enumerate() 与 for 循环的结合使用

for i, a in enumerate(A)
    do something with a
    
用 enumerate(A) 不仅返回了 A 中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用
enumerate(A, j) 还可以确定索引起始值为 j 。
languages = ['Python', 'R', 'Matlab', 'C++']
for language in languages:
    print('I love', language)
print('Done!')

I love Python
I love R
I love Matlab
I love C++
Done!


languages = ['Python', 'R', 'Matlab', 'C++']
for i, language in enumerate(languages, 2):
    print(i, 'I love', language)
print('Done!')

2 I love Python
3 I love R
4 I love Matlab
5 I love C++
Done!

break语句

break 语句可以跳出当前所在层的循环。

import random
secret = random.randint(1, 10) #[1,10]之间的随机数
while True:
    temp = input("不妨猜一下小哥哥现在心里想的是那个数字:")
    guess = int(temp)
    if guess > secret:
        print("大了,大了")
    else:
        if guess == secret:
            print("你是小哥哥心里的蛔虫吗?")
            print("哼,猜对也没有奖励!")
            break
        else:
            print("小了,小了")
print("游戏结束,不玩儿啦!")

不妨猜一下小哥哥现在心里想的是那个数字:5
大了,大了
不妨猜一下小哥哥现在心里想的是那个数字:3
你是小哥哥心里的蛔虫吗?
哼,猜对也没有奖励!
游戏结束,不玩儿啦!

continue语句

continue 终止本轮循环并开始下一轮循环。

for i in range(10):
    if i % 2 != 0:
        print(i)
        continue
    i += 2
    print(i)
    
2
1
4
3
6
5
8
7
10
9

pass语句

pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就

是用来解决这些问题的。

def a_func():
    pass

pass 是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管 pass 语句不做任何操

作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个 pass 语句,让代码可以正常运行。

推导式

[ expr for value in collection [if condition] ]
x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)

[-8, -4, 0, 4, 8]
x = [i ** 2 for i in range(1, 10)]
print(x)

[1, 4, 9, 16, 25, 36, 49, 64, 81]
#元组推导式

a = (x for x in range(10))
print(a)
print(tuple(a))

<generator object <genexpr> at 0x000002A94DF10740>
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
# 字典推导式

b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)

{0: True, 3: False, 6: True, 9: False}
# 集合推导式

c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)

{1, 2, 3, 4, 5, 6}

综合实例

passwdList = ['123', '345', '890']
valid = False
count = 3
while count > 0:
    password = input('enter password:')
    for item in passwdList:
        if password == item:
            valid = True
            break
    if not valid:
        print('invalid input')
        count -= 1
        continue
    else:
        break

异常处理

异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理

程序将被启动,从而恢复程序的正常运行。

python标准异常总结

1. BaseException:所有异常的 基类 2. Exception:常规异常的 基类 3. StandardError:所有的内建标准异常的基类
4. ArithmeticError:所有数值计算异常的基类
5. FloatingPointError:浮点计算异常
6. OverflowError:数值运算超出最大限制
7. ZeroDivisionError:除数为零
8. AssertionError:断言语句(assert)失败
9. AttributeError:尝试访问未知的对象属性
10. EOFError:没有内建输入,到达EOF标记
11. EnvironmentError:操作系统异常的基类
12. IOError:输入/输出操作失败
13. OSError:操作系统产生的异常(例如打开一个不存在的文件)
14. WindowsError:系统调用失败
15. ImportError:导入模块失败的时候
16. KeyboardInterrupt:用户中断执行
17. LookupError:无效数据查询的基类
18. IndexError:索引超出序列的范围
19. KeyError:字典中查找一个不存在的关键字
20. MemoryError:内存溢出(可通过删除对象释放内存)
21. NameError:尝试访问一个不存在的变量
22. UnboundLocalError:访问未初始化的本地变量
23. ReferenceError:弱引用试图访问已经垃圾回收了的对象
24. RuntimeError:一般的运行时异常
25. NotImplementedError:尚未实现的方法
26. SyntaxError:语法错误导致的异常
27. IndentationError:缩进错误导致的异常
28. TabError:Tab和空格混用
29. SystemError:一般的解释器系统异常
30. TypeError:不同类型间的无效操作
31. ValueError:传入无效的参数
32. UnicodeError:Unicode相关的异常
33. UnicodeDecodeError:Unicode解码时的异常
34. UnicodeEncodeError:Unicode编码错误导致的异常
35. UnicodeTranslateError:Unicode转换错误导致的异常

python标准警告总结

1. Warning:警告的基类
2. DeprecationWarning:关于被弃用的特征的警告
3. FutureWarning:关于构造将来语义会有改变的警告
4. UserWarning:用户代码生成的警告
5. PendingDeprecationWarning:关于特性将会被废弃的警告
6. RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
7. SyntaxWarning:可疑语法的警告
8. ImportWarning:用于在导入模块过程中触发的警告
9. UnicodeWarning:与Unicode相关的警告
10. BytesWarning:与字节或字节码相关的警告
11. ResourceWarning:与资源使用相关的警告

try-except语句

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码

try 语句按照如下方式工作:

  1. 首先,执行 try 子句(在关键字 try 和关键字 except 之间的语句)
  2. 如果没有异常发生,忽略 except 子句, try 子句执行后结束。
  3. 如果在执行 try 子句的过程中发生了异常,那么 try 子句余下的部分将被忽略。如果异常的类型和 except 之后的
    名称相符,那么对应的 except 子句将被执行。最后执行 try 语句之后的代码。
  4. 如果一个异常没有与任何的 except 匹配,那么这个异常将会传递给上层的 try 中。
try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError:
    print('打开文件出错')
    
打开文件出错
try:
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
    
打开文件出错
原因是:[Errno 2] No such file or directory: 'test.txt'

一个 try 语句可能包含多个 except 子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

try:
    int("abc")
    s = 1 + '1'
    f = open('test.txt')
    print(f.read())
    f.close()
except OSError as error:
    print('打开文件出错\n原因是:' + str(error))
except TypeError as error:
    print('类型出错\n原因是:' + str(error))
except ValueError as error:
    print('数值出错\n原因是:' + str(error))
    
数值出错
原因是:invalid literal for int() with base 10: 'abc'
dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
    x = dict1['y']
except LookupError:
    print('查询错误')
except KeyError:
    print('键错误')
else:
    print(x)
    
查询错误

try-except-else 语句尝试查询不在 dict 中的键值对,从而引发了异常。这一异常准确地说应属于 KeyError ,但由

于 KeyError 是 LookupError 的子类,且将 LookupError 置于 KeyError 之前,因此程序优先执行该 except 代码块。

所以,使用多个 except 代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。

dict1 = {'a': 1, 'b': 2, 'v': 22}
try:
    x = dict1['y']
except KeyError:
    print('键错误')
except LookupError:
    print('查询错误')
else:
    print(x)
    
键错误

一个 except 子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

try:
    s = 1 + '1'
    int("abc")
    f = open('test.txt')
    print(f.read())
    f.close()
except (OSError, TypeError, ValueError) as error:
    print('出错了!\n原因是:' + str(error))
    
出错了!
原因是:unsupported operand type(s) for +: 'int' and 'str'

try-except-finally语句

try:
    检测范围
except Exception[as reason]:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

不管 try 子句里面有没有发生异常, finally 子句都会执行。如果一个异常在 try 子句里被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。

def divide(x, y):
    try:
        result = x / y
        print("result is", result)
    except ZeroDivisionError:
        print("division by zero!")
    finally:
        print("executing finally clause")
divide(2, 1)

result is 2.0
executing finally clause

try-except-else语句

如果在 try 子句执行时没有发生异常,Python将执行 else 语句后的语句

try:
    检测范围
except:
    出现异常后的处理代码
else:
    如果没有异常执行这块代码

使用 except 而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所

有的异常。

try:
    检测范围
except(Exception1[, Exception2[,...ExceptionN]]]):
    发生以上多个异常中的一个,执行这块代码
else:
    如果没有异常执行这块代码
try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()
    
内容写入文件成功

注意: else 语句的存在必须以 except 语句的存在为前提,在没有 except 语句的 try 语句中使用 else 语句,会引发

语法错误。

raise语句

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

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    
An exception flew by!
出现异常后的处理代码
finally:
    无论如何都会被执行的代码

不管 try 子句里面有没有发生异常, finally 子句都会执行。如果一个异常在 try 子句里被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后被抛出。

def divide(x, y):
    try:
        result = x / y
        print("result is", result)
    except ZeroDivisionError:
        print("division by zero!")
    finally:
        print("executing finally clause")
divide(2, 1)

result is 2.0
executing finally clause

try-except-else语句

如果在 try 子句执行时没有发生异常,Python将执行 else 语句后的语句

try:
    检测范围
except:
    出现异常后的处理代码
else:
    如果没有异常执行这块代码

使用 except 而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所

有的异常。

try:
    检测范围
except(Exception1[, Exception2[,...ExceptionN]]]):
    发生以上多个异常中的一个,执行这块代码
else:
    如果没有异常执行这块代码
try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print("Error: 没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    fh.close()
    
内容写入文件成功

注意: else 语句的存在必须以 except 语句的存在为前提,在没有 except 语句的 try 语句中使用 else 语句,会引发

语法错误。

raise语句

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

try:
    raise NameError('HiThere')
except NameError:
    print('An exception flew by!')
    
An exception flew by!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值