如果从错误的解释器调用python脚本,如何快速使其失败?
我从离开我雇主的人那里继承了一些Python脚本。有些是从Jython那里跑出来的,有些不是 我想将它们添加到svn中,但在添加之前,我想修改这些文件,以便在从python运行“requires Jython”文件时,用户会收到类似“please run with Jython”的消息,程序将退出 (警告:我不太熟悉Python/Jython。) 我希望最简单的方法是创建一个文件如果从错误的解释器调用python脚本,如何快速使其失败?,python,jython,Python,Jython,我从离开我雇主的人那里继承了一些Python脚本。有些是从Jython那里跑出来的,有些不是 我想将它们添加到svn中,但在添加之前,我想修改这些文件,以便在从python运行“requires Jython”文件时,用户会收到类似“please run with Jython”的消息,程序将退出 (警告:我不太熟悉Python/Jython。) 我希望最简单的方法是创建一个文件require jython.py,其内容如下: if runtime.name != 'jython' pri
require jython.py
,其内容如下:
if runtime.name != 'jython'
print "Please run with Jython"
exit(1)
然后是“包括/要求”?这个文件(再说一遍,我不是专家,请耐心听我说)
有人能为我详细说明一下步骤吗?我所看到的是,尝试导入一个特定版本或实现专用的模块,如果该模块不存在,则引发
ImportError
假设Jython(而不是Python)有一个名为special
的模块,然后添加:
# at the top of your module:
try:
import special
except ImportError:
raise ImportError("this script is meant to be used with Jython")
else:
raise
请注意,您使ImportError异常更加明确,而不是简单地引发它(并使用户相信模块本身存在问题,而不是通知解释器选择不当)。我会给你一个更具体的例子,说明导入什么模块,但我对Jython一点也不熟悉
换句话说,用于模块导入:假设导入是正确的,但一旦找不到预期的行为就会失败(这就是try
语句应该用于的)
检查解释器的另一种方法是使用sys
模块(在Python中-我不知道Jython是否有):
我所看到的是尝试导入一个特定版本或实现的专用模块,如果该模块不存在,则引发
ImportError
假设Jython(而不是Python)有一个名为special
的模块,然后添加:
# at the top of your module:
try:
import special
except ImportError:
raise ImportError("this script is meant to be used with Jython")
else:
raise
请注意,您使ImportError异常更加明确,而不是简单地引发它(并使用户相信模块本身存在问题,而不是通知解释器选择不当)。我会给你一个更具体的例子,说明导入什么模块,但我对Jython一点也不熟悉
换句话说,用于模块导入:假设导入是正确的,但一旦找不到预期的行为就会失败(这就是try
语句应该用于的)
检查解释器的另一种方法是使用sys
模块(在Python中-我不知道Jython是否有):
为什么需要用Jython运行代码?如果您在不同的解释器中运行它,会有什么样的情况中断?Jython代码会调用Java。@nosklo。这些失败可能具有误导性。就像一个语法错误。如果我知道问题的原因,在问题发生之前,我应该采取一些措施,并将问题告知脚本用户。我很好奇,为什么不能使用jython运行所有程序?只是想注意,您不想将此文件命名为
require jython.py
,连字符不是模块名称中的有效字符。为什么需要代码与Jython一起运行?如果您在不同的解释器中运行它,会有什么样的情况中断?Jython代码会调用Java。@nosklo。这些失败可能具有误导性。就像一个语法错误。如果我知道问题的原因,在问题发生之前,我应该采取一些措施,并将问题告知脚本用户。我很好奇,为什么不能使用jython运行所有程序?只是想注意,您不想命名此文件require jython.py
,连字符在模块名称中不是有效字符。同意,您不应该直接测试解释器,只要您需要的模块可用。如果您想通知用户他可能使用了错误的解释器,我更希望使用print,然后重新抛出原始异常,以防用户知道他在做什么,但忘记安装模块,他知道缺少什么。Jython可以使用java包。因此,导入java就足够了。您正在寻找的特殊模块是java.sys.subversion,Jython(或我的版本)中缺少该模块。这是我简要研究的内容之一。同意,您不应该直接测试解释器,只要您需要的模块可用。如果您想通知用户他可能使用了错误的解释器,我更希望使用print,然后重新抛出原始异常,以防用户知道他在做什么,但忘记安装模块,他知道缺少什么。Jython可以使用java包。因此,导入java就足够了。您正在寻找的特殊模块是java.sys.subversion,Jython(或我的版本)中缺少该模块。这是我简要研究过的事情之一。