Python2与Python3关于字符串编码处理的差别总结
Python2与Python3在字符串编码处理方面有很多的差别,本文将从以下几个方面进行介绍:
- 编码方式变化
- 字符串类型变化
- 字符串格式化变化
- IOError处理变化
编码方式变化
Python2默认使用ASCII编码,这会导致在处理非ASCII字符时会出现问题,如中文、日文等。而Python3默认使用UTF-8编码,可以处理各种语言的字符。
示例1(Python2):
s = '你好'
print(s)
输出结果:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
示例2(Python3):
s = '你好'
print(s)
输出结果:
你好
字符串类型变化
Python2有两种类型的字符串:str和unicode。其中str是字节类型,unicode是字符类型。而Python3将两种类型合并成了一种:str。
示例1(Python2):
s1 = 'hello' # str类型,字节类型
s2 = u'你好' # unicode类型,字符类型
print(type(s1)) # <type 'str'>
print(type(s2)) # <type 'unicode'>
示例2(Python3):
s1 = 'hello' # str类型,字符类型
s2 = '你好' # str类型,字符类型
print(type(s1)) # <class 'str'>
print(type(s2)) # <class 'str'>
字符串格式化变化
在Python2中,字符串格式化有两种方式:百分号(%)和字符串.format()方法。而在Python3中,依然可以使用这两种方式,但是加入了一种新的方式:f-string。
示例1(Python2):
name = 'Jack'
age = 30
print('My name is %s , I am %d years old.' % (name, age))
print('My name is {} , I am {} years old.'.format(name, age))
输出结果:
'My name is Jack , I am 30 years old.'
'My name is Jack , I am 30 years old.'
示例2(Python3):
name = 'Jack'
age = 30
print(f'My name is {name} , I am {age} years old.')
print('My name is {} , I am {} years old.'.format(name, age))
输出结果:
My name is Jack , I am 30 years old.
My name is Jack , I am 30 years old.
IOError处理变化
在Python2中,当打开文件出错时,会抛出IOError异常。而在Python3中,则抛出OSError异常,该异常包含更多的错误信息。
示例1(Python2):
try:
f = open('file.txt')
except IOError as e:
print('Error:文件不存在')
输出结果:
Error:文件不存在
示例2(Python3):
try:
f = open('file.txt')
except OSError as e:
print(f'Error:{e.strerror}')
输出结果:
Error:No such file or directory
以上是Python2与Python3关于字符串编码处理的差别总结,希望能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python2与Python3关于字符串编码处理的差别总结 - Python技术站