python2 与 python3的区别 (4)

就像print语句在python3里变成了一个函数一样,exec语句也是这样的。exec()函数使用一个包含任意python代码的字符串作为参数,然后像执行语句或表达式一样执行它。exec()跟eval()是相似,但exec()更加强大并具有挑战性。eval()函数只能执行单独一条表达式,但是exec()能够执行多条语句,导入(import),函数声明-实际上整个python程序的字符串表示也可以。

python2 python3 备注
exec codeString   exec(codeString)      
exec codeString in a_global_namespace   exec(codeString, a_global_namespace)      
exec_codeString in a_global_namespace, a_local_namespace   exec(codeString, a_global_namespace, a_local_namespace      

execfile

python2中的execfile语句可以像执行python代码那样使用字符串。不同的是exec使用字符串,而execfile使用文件。在python3,execfile语句被去掉了。

REPR

在python2,为了得到一个任意对象的字符串表示,有一种把对象包装在反引号里(比如x)的特殊语法。在python3里,这种能力仍然存在,但是你不能再使用反引号获得这种字符串表示了,需要使用全局函数repr().

python2 python3 备注
x   repr(x)      
\'PapayaWhip\' +2   repr(\'PapayWhip\' + repr(2))      

TRYEXCEPT语句

python2到python3,捕获异常的语法有些变化。

Python2 Python3 备注
try: import mymodule except ImportError, e pass   try: import mymodule except ImportError as e: pass      
try: import mymodule except (RuntimeError, ImportError), e pass   try: import mymodule except(RuntimeError, ImportError) as e: pass      
try: import mymodule except ImportError: pass   no change      
try: import mymodule except: pass   no change      

RAISE

python3里,抛出自定义异常的语法有细微的变化。

python2 python3 备注
raise MyException   unchanged      
raise MyException, \'error message\'   raise MyException(\'error message\')      
raise MyException, \'error message\'   raise MyException(\'error message\').with_traceback(a_traceback)      
raise \'error message\'   unsupported      

生成器THROW

在python2里,生成器有一个throw()方法。调用a_generator.throw()会在生成器被暂停的时候抛出异常,然后返回由生成器函数获取的下一个值。python3中,这一功能仍然可用,但语法有一点不同。

python2 python3 备注
a_generator.throw(MyException)   no change      
a_generator.throw(MyException, \'error message\'   a_generator.throw(MyException(\'error message\'))      
a_generator.throw(\'error message\')   unsupported      

XRANGE()

python2里,有两种方法获得一定范围内的数字:range(),返回一个列表,还有xrange(),返回一个迭代器。python3 里,range()返回迭代器,xrange()不再存在。

python2 python3 备注
xrange(10)   range(10)      
a_list = range(10)   a_list= list(range(10))      
[i for i in xrange(10)]   [i for i in range(10)]      
for i in range(10):   no change      
sum(range(10))  

no change

 

RAW_INPUT()和INPUT()

python2有两个全局函数,用在命令行请求用户输入。第一个叫input(),它等待用户输入一个python表达式(然后返回结果)。第二个叫做raw_input(),用户输入什么他就返回什么。python3 通过input替代了他们。

python2 python3 备注
raw_input()   input   input替代了raw_input  
raw_input(\'prompt\')   input(\'prompt\')   python3仍然支持提示符参数  
input()   eval(input))      
函数属性FUNC_*

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzxwf.html