我必须完成一项任务,我非常担心,因为单个TA有许多项目要运行,所以将使用python
调用它,它将调用python 2.7,当时程序是为python3.2
编写的,应该以这种方式调用。这会导致语法错误,我会松散点。我知道在进行辅助项目时,这种情况会发生很多,如果TA遇到这种情况,我认为他不会跟进。
我要提交一个readme
,但我想知道是否有办法在我的代码中捕捉到这一点而不用大惊小怪,并打印一条声明说要重新运行项目为python3.2 project.py
。我可以try: print "Rerun project…" except:pass
,但有更好的方法吗?
答案 0 :(得分:8)
你可以这样做:
import sys
print(sys.version_info)
从Python 2.7开始,您还可以使用:
print(sys.version_info.major, sys.version_info.minor, sys.version_info.micro)
当目前正在运行的Python版本不符合要求时,您可以使用sys.version_info
的值来打印警告。
您也可以使用:
import platform
print(platform.python_version())
答案 1 :(得分:2)
这实际上是一个难以实现的问题,你可能会初步想到。
假设您有以下代码:
import platform
import sys
if platform.python_version().startswith('2'):
# This NEVER will be executed no matter the version of Python
# because of the two syntax errors below...
sys.stdout.write("You're using python 2.x! Python 3.2+ required!!!")
sys.exit()
else:
# big program or def main(): and calling main() .. whatever
# later in that file/module:
x, *y=(1,2,3) # syntax error on Python 2...
# or
print 'test' # syntax error on Python 3...
else
子句下的两个语法错误之一是在实际执行if
之前生成的,无论用于运行它的Python版本如何。因此,程序不会像您期望的那样优雅地退出;无论如何,它都会因语法错误而失败。
解决方法是将您的实际程序放在外部文件/模块中并以try/except
这样包装:
try:
import Py3program # make sure it has syntax guaranteed to fail on
# Python 2 like x, *y=1,2,3
except SyntaxError:
sys.stdout.write(error message)
sys.exit()
# rest of the Python 3 program...
如果您的TA将使用sheebang执行该文件,那么这仍然是一种更好的方法。也许问TA如何运行你的脚本?
答案 2 :(得分:0)
如何像这样启动程序:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import sys
if sys.version_info < (3,0,0):
print(__file__ + ' requires Python 3, while Python ' + str(sys.version[0] + ' was detected. Terminating. '))
sys.exit(1)