Python笔记(2和3的异同、编码问题、pypy、异常处理)

本文探讨了Python 2与3的主要差异,包括异常处理、编码问题、以及如何在Python 3下设置默认编码。同时,介绍了PyPy作为编译加速器的作用,它能提升单个Python脚本的运行速度,但不加速导入库的速度。此外,还提到了Ubuntu 16.04下设置Python3为默认的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python异常

原文链接
异常种类及描述

try:
    xxx
except Exception:
    xxx

此处Exception可不写,若填写则代表只有对应异常

try:
    xxx
except Exception:
    xxx
else:
    xxx

若没有异常则执行else后面的语句

try:
    xxx
except Exception1, Exception2:
    xxx
else:
    xxx
finally:
    xxx

无论是否异常,都执行finally语句

Python2与Python3的部分异同

使用2to3将代码移植到Python 3

  • print

    首先最简单的区别的必然是print语句,简单来说就是有无括号

  • unicode字符串

    • Python2中必须使用 u’unicode_str’来表示这是unicode字符串

    • Python3默认是unicode,所以可以直接时候输入’unicode_str’

  • <>

    • Python3不支持<>这个运算符,需使用!=

    • Python2则两者都支持

  • 字典部分区别

    • has_key()

    • Python2使用dict.has_key(“xx”),来检测字典中是否包含xx

    • Python3不支持此方法,使用 “xx” in dict 即可

    • keys()、items()

    • Python2使用此方法默认返回值为列表

    • Python3必须使用list方法进行转换

  • 调用部分模块的区别

    • urllib、urllib2

    • Python2 直接调用两者即可

    • Python3 合并了urllib2,综合到了urllib中

    • commands –> subprocess

  • filter()

    • Python2 采用了filter(xxx) 返回列表

    • Python3 要使用list方法,才能使filter返回列表

  • map()

    • Python2 返回列表

    • Python3 返回迭代器

  • reduce()

    • Python2 直接使用

    • Python3 需要引入from functools import reduce

  • try…except

    • Python2 使用except someError, e

    • Python3 使用except someError as e:

  • raise

    • Python2 使用raise xxx, ‘some msg’

    • Python3 使用raise xxx(‘some msg’)

  • xrange()

    • Python2 使用xrange(10)

    • Python3 使用range(10)

  • raw_input()

    • Python2 使用raw_input()

    • Python3 使用input(),Python2的input()转为eval(input())

  • lambda()

    • Python2 使用lambda (x, (y, z)): x + y + z

    • Python3 使用lambda x_y_z: x_y_z[0] + x_y_z[1][0] + x_y_z[1][1]

  • zip()

    • Python2 使用zip(a, b, c)即可返回一个元组组成的列表

    • Python3 要使用list(zip(a, b, c))才能返回列表,否则返回迭代器

  • 对元组列表解析

    • Python2 [i for i in 1, 2]

    • Python3 [i for i in (1, 2)]

编码问题

编码问题可能由于各种各样的原因导致。我认为最大的一个坑是系统不同导致编码问题。Windows10系统下和Linux系统默认的编码问题,会导致python使用的解码不同,所以可能会乱码。所以这个时候我们需要更改默认编码。

# python3.6

# 网易云爬取的最佳解决方案,系统为windows10
# 只需要在代码前面使用这三行代码即可
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

# 当然也不是所有情况都这么坑,所以还有其他几种方案可供选择
# 使用decode解码
str.decode("unicode-escape")
# 或者decode,使用str编码的方式来解码

# 还可以使用,有的时候不一定是utf8
str.decode("utf8", "ignore")
# 有时候是
str.decode("utf8", "replace")

pypy编译加速器

pypy是一个编译器加速器,可以大大提升需要运行很久的python脚本的运行速度,加速了当前脚本的运算速度,并不增加调包速度

使用前提条件:
更适用于单个脚本的使用,

# Ubuntu下的安装
>>>sudo add-apt-repository ppa:pypy/ppa
>>>sudo apt-get update
>>>sudo apt-get install pypy pypy-dev

# 使用
>>>pypy xx.py
# 或者直接在pycharm里设置编辑器
# ubuntu下安装在/usr/bin/pypy

Ubuntu16.04下将Python3设置为默认

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150

# 切换回Python2
sudo update-alternatives --config python
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值