就像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_*