Table of Contents
defining exception and exception chaining
Unicode String/Byte String/BaseString
版权所有:013-2016 Python Charmers Pty Ltd, Australia.
作者: Ed Schofield.
许可:Creative Commons Attribution.
pdf版本: http://python-future.org/compatible_idioms.pdf
视频版本: http://www.youtube.com/watch?v=KOqk8j11aAI&t=10m14s
这个笔记列举了写面向未来的代码(即同时支持python2和3)的一些惯例
对小版本:
- Python 2: 2.6+
- Python 3: 3.3+
支持包: python-future and six
python-future是python2和python3之间缺少的兼容层, 其允许你使用一个单一的,干净的python 3.x-compatible基础代码去同时支持python 2和3。这样产生的开销是最小的(minimal overhead)。
我们使用pip install future可以import如下包:
import future
import builtins
import past
import futurize
import pasteurize
目的相同共同相似的包还有python six,可以通过pip install six来安装,安装后,可import如下包:
import six
关键语法
-
print
python2 only:
[wlin@wlin rc_ci]$ ipython2
Python 2.7.5 (default, May 31 2018, 09:41:32)
In [2]: print 'Hello'
Hello
for both:
[wlin@wlin python_compatible]$ cat print.py
from __future__ import print_function
print('hello','world')
[wlin@wlin python_compatible]$ python2 print.py
hello world
[wlin@wlin python_compatible]$ python3 print.py
hello world
-
raising exceptions
python2 only:
[wlin@wlin python_compatible]$ ipython2
Python 2.7.5 (default, May 31 2018, 09:41:32)
In [1]: raise ValueError, "dodgy value"
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1-640428d25114> in <module>()
----> 1 raise ValueError, "dodgy value"
ValueError: dodgy value
In [3]: import sys
In [4]: traceback = sys.exc_info()[2]
In [5]: raise ValueError, "dodgy value", traceback
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-91d00a6d59b2> in <module>()
----> 1 raise ValueError, "dodgy value", traceback
ValueError: dodgy value
for both:
carawangs-MacBook-Pro:python_compatible carawang$ cat raise_error.py
raise ValueError('dodgy value')
#from future.utils import raise_with_traceback
#raise_with_traceback(ValueError("dodgy value"))
carawangs-MacBook-Pro:python_compatible carawang$ python2.7 raise_error.py
Traceback (most recent call last):
File "raise_error.py", line 1, in <module>
raise ValueError('dodgy value')
ValueError: dodgy value
carawangs-MacBook-Pro:python_compatible carawang$ python3.7 raise_error.py
Traceback (most recent call last):
File "raise_error.py", line 1, in <module>
raise ValueError('dodgy value')
ValueError: dodgy value
carawangs-MacBook-Pro:python_compatible carawang$ cat raise_error.py
#raise ValueError('dodgy value')
from future.utils import raise_with_traceback
raise_with_traceback(ValueError("dodgy value"))
carawangs-MacBook-Pro:python_compatible carawang$ python2.7 raise_error.py
Traceback (most recent call last):
File "raise_error.py", line 4, in <module>
raise_with_traceback(ValueError("dodgy value"))
File "<string>", line 7, in raise_with_traceback
ValueError: dodgy value
carawangs-MacBook-Pro:python_compatible carawang$ python3.7 raise_error.py
Traceback (most recent call last):
File "raise_error.py", line 4, in <module>
raise_with_traceback(ValueError("dodgy value"))
File "/usr/local/lib/python3.7/site-packages/future/utils/__init__.py", line 446, in raise_with_traceback
raise exc.with_traceback(traceback)
ValueError: dodgy value
-
defining exception and exception chaining
python3 only: