Python 3.x 在计算函数之前,检查脚本中的Python版本

Python 3.x 在计算函数之前,检查脚本中的Python版本,python-3.x,function,version,python-2.x,Python 3.x,Function,Version,Python 2.x,我原以为你会回答这个问题,但这个解决方案似乎对我不起作用。 我的脚本与Python2不兼容,如果使用Python2运行,我需要它优雅地退出。这是因为python在运行任何代码之前都会对所有函数进行求值,而不管代码放在哪里 以下是我所拥有的: import os, sys, re, argparse import pandas as pd if sys.version_info[0] < 3: print("Please run this script using python

我原以为你会回答这个问题,但这个解决方案似乎对我不起作用。 我的脚本与Python2不兼容,如果使用Python2运行,我需要它优雅地退出。这是因为python在运行任何代码之前都会对所有函数进行求值,而不管代码放在哪里

以下是我所拥有的:

import os, sys, re, argparse
import pandas as pd

if sys.version_info[0] < 3:
print("Please run this script using python 3 or higher")
sys.exit(1)

def get_samples(filename):
try:
    summary_table = pd.read_csv(filename, sep='\t')
except Exception:
    print(f"Could not import {filename} using Pandas")
    sys.exit(1)
return(summary_table['sample'])

#more functions 

def main():
    #some code here

if '__name__' == __main__:
    main()

顺便说一句,pandas导入语句的except语句也不起作用。如果进口中断,我希望有一个干净的退出方式。这显然不是本文的重点,但如果你碰巧有建议,我欢迎你的建议。

这看起来可能与你正在尝试的类似


Shawn

您遇到了一个难题,在python版本<3上执行时,打印操作是一个内置函数,括号不合适,但是要为python 3+编译,必须使用括号以避免编译器错误。因此,如果从打印内容中删除括号,您将为Python2编译,但为Python3编译失败。如果保持print语句不变,那么将为Python3编译,但为Python2Right编译失败。我不需要与python2向后兼容。我需要:1)如果用户在python2而不是python3中运行它,则优雅地退出(即,在我们的服务器上,他们键入
python myscript.py而不是
python3 myscript.py
),或者2)如果用户尝试在python2中运行它,则强制切换到python3。两种方法都有可能吗?那么我可以添加shebang行
#/usr/bin/env python3
并强制在python3中打开它?我不担心支持python2。如果有人意外地在python2中运行它,它能够优雅地退出,那就太好了。舍邦线可能会完全阻止这种情况发生?编辑:没有。编辑那个shebang行行不通。
/usr/bin/python elims_push.py -d Run_2021.04.16-10.36.20_M947-21-010
File "myscript.py", line 43
print(f"Could not import {filename} using Pandas")