【问题标题】:Check for Python version in script before functions are evaluated在评估函数之前检查脚本中的 Python 版本
【发布时间】:2021-07-15 17:32:02
【问题描述】:

我认为this post 会回答这个问题,但该解决方案似乎对我不起作用。 我的脚本与 Python 2 不兼容,如果它与 Python 2 一起运行,我需要它正常退出。这不是因为无论代码放在哪里,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()

当我在 Python 2.7 中测试运行脚本时,脚本在打印行(第一个不兼容位置)失败:

/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")

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

【问题讨论】:

  • 你有一个难题,在python版本
  • 对。我不需要向后兼容 python2。我需要:1)如果用户在 python2 而不是 python3 中运行它(即在我们的服务器上,他们输入python myscript.py 而不是python3 myscript.py),则正常退出,或者 2)如果用户尝试运行,则强制切换到 python3它在python2中。有没有一种可能?

标签: python-3.x function version python-2.x


【解决方案1】:

【讨论】:

  • 那么我可以添加shebang行#!/usr/bin/env python3并强制它在python3中打开吗?我不担心支持python2。如果有人不小心在 python2 中运行它,如果它可以优雅地退出,那就太好了。 shebang线可能会完全阻止这种情况发生吗?编辑:不。编辑该 shebang 行不起作用。
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2011-09-02
  • 2011-07-10
  • 2020-12-29
相关资源
最近更新 更多