我有一个只应该使用Python 3运行的脚本。我想提供一个很好的错误消息,如果用户尝试使用Python 2.x运行它,则不应该使用python2运行此脚本
我该怎么做?当我尝试检查Python版本时,它仍会抛出错误,因为Python在执行if
条件之前解析整个文件。
如果可能的话,我宁愿不再制作另一个剧本。
答案 0 :(得分:10)
您可以编写一个包装器启动脚本,在该脚本中只导入实际脚本并捕获语法错误:
real_module.py
然后,当import sys
if sys.version_info[0] < 3:
print('You need to run this with Python 3')
sys.exit(1)
import real_module
使用Python 3语法时,如果与Python 3一起使用会引发异常,则会打印出上述消息。
当然,您不仅可以导入脚本,还可以先检查版本,然后在版本为3时导入它。这样做的好处是,即使运行,您仍会看到实际脚本的语法错误它与Python 3:
request
答案 1 :(得分:1)
试试这个:
import sys
#sys.version gives you version number in this format
#(2, 5, 2, 'final', 0)
version=sys.version_info[0]
if version == 2:
sys.exit("This script shouldn't be run by python 2 ")
答案 2 :(得分:1)
import sys
if (sys.version_info > (2, 0)):
raise Exception('script should not be run with python2.x')
如果脚本在2.x python版本
下运行,则会引发错误答案 3 :(得分:0)
您可以使用以下事实:在Python 2中,字符串是字节字符串,而在Python 3中,它们是unicode字符串。所以任何一个
A(int)
或
if ' ' == b' ':
raise Exception ('Running this script with Python 2 is not supported')
可以。请注意,这不需要任何导入-只需语言功能即可。
答案 4 :(得分:0)
这些都不能正常工作,正如其他人提到的,SyntaxError
会首先被解析,而 except SyntaxError
也不起作用。
最好的解决方案是包装模块,但如果由于其他技术或政治原因您无法在代码中创建另一个模块,您可以执行以下非常肮脏的技巧:
z, *y=1,2,3,4 #This script requires requires python 3! A Syntax error here means you are running it in python2!
python2.7 中的结果将是:
File "notpython2.py", line 3
z, *y=1,2,3,4 #This script requires requires python 3! A Syntax error here means you are running it in python2!
^
SyntaxError: invalid syntax
是的,代码很丑,但如果有人能想到更好的解决方案,尽管有新模块,请在此处添加。