相关疑难解决方法(0)

如何在使用新语言功能的程序中检查Python版本?

如果我的Python脚本至少需要特定版本的Python,那么在使用早期版本的Python启动脚本时,正确失败的正确方法是什么?

如何及早获得控制权以发出错误消息并退出?

例如,我有一个使用ternery操作符(2.5中的新增内容)和"with"块(2.6中的新增内容)的程序.我写了一个简单的小解释器 - 版本检查器例程,这是脚本会调用的第一件事......除了它没有那么远.相反,在我的例程被调用之前,脚本在python编译期间失败.因此,脚本的用户会看到一些非常模糊的synax错误回溯 - 这几乎需要专家推断它只是运行错误版本的Python的情况.

我知道如何检查Python的版本.问题是某些语法在旧版本的Python中是非法的.考虑这个程序:

import sys
if sys.version_info < (2, 4):
    raise "must use python 2.5 or greater"
else:
    # syntax error in 2.4, ok in 2.5
    x = 1 if True else 2
    print x
Run Code Online (Sandbox Code Playgroud)

在2.4下运行时,我想要这个结果

$ ~/bin/python2.4 tern.py 
must use python 2.5 or greater
Run Code Online (Sandbox Code Playgroud)

而不是这个结果:

$ ~/bin/python2.4 tern.py 
  File "tern.py", line 5
    x = 1 if True else 2
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

(引导同事.)

python version

235
推荐指数
8
解决办法
25万
查看次数

如何编写能够正确要求最小python版本的Python代码?

我想看看是否有任何方法需要一个最小的python版本.

由于新的异常处理(as关键字),我有几个需要Python 2.6的python模块.

它看起来即使我在我的脚本开头检查python版本,代码也不会运行,因为解释器将在模块内部失败,抛出一个丑陋的系统错误而不是告诉用户使用更新的python.

python

53
推荐指数
6
解决办法
1万
查看次数

如何编写Python 2.6+脚本,使用较旧的Python优雅地失败?

我正在使用Python 3.x中的新打印,我观察到以下代码由于没有编译end=' '.

from __future__ import print_function

import sys
if sys.hexversion < 0x02060000:
    raise Exception("py too old")

...
print("x",end=" ") # fails to compile with py24
Run Code Online (Sandbox Code Playgroud)

如何继续使用新语法但使脚本失败?是否必须调用另一个脚本并在此处仅使用安全语法?

python python-3.x

5
推荐指数
2
解决办法
758
查看次数

Python:将print函数作为参数发送

我的教授已经提到可以将print这样的函数作为参数传递,但是当我尝试实际实现它时,我得到语法错误.这是我在这里失踪的小事吗?

 def goTime(sequence, action):
    for element in sequence:
       action(element)

 def main():
    print("Testing Begins")
    test = list ( range( 0 , 20, 2) ) 
    goTime(test, print)
    print("Testing Complete")
Run Code Online (Sandbox Code Playgroud)

运行以下命令后,我收到此语法错误:

goTime(test, print)
                 ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

如果我定义自己的使用print的函数,它的工作原理如下:

def printy(element):
   print(element)

def goTime(sequence, action):
   for element in sequence:
      action(element)

def main():
   print("Testing Begins")
   test = list ( range( 0 , 20, 2) ) 
   goTime(test, printy)
   print("Testing Complete")
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
1432
查看次数

python 2.5中的向前兼容打印语句

好吧,也许我只是休息一天.这似乎是许多人必须要问的事情,但谷歌让我失望.我发现的最接近的是这个并没有完全解决这个问题.

在工作中,我在我的桌面上运行Arch(默认情况下是python 3),在我公司的服务器上运行Debian Lenny(这是python 2.5).我想编写一个可以在python 2和3中运行的单个python脚本.这是一个非常简单的脚本,对它来说并不多(大多数它只是调用git使用subprocess).对于该死的print陈述,一切都已经在两个版本的python EXCEPT中都有效.

那里的每个人似乎都在暗示这个from __future__ import print_function伎俩.然而,这是在python 2.6中引入的,我坚持使用2.5.

那么我的选择是什么?如何print使用相同的脚本调用2.5和3?我想的可能是某种包装函数,但这可能不是最"pythonic"的做事方式.你的意见?不,将服务器升级到2.6不是一种选择.

谢谢!

python printing stdout

4
推荐指数
1
解决办法
1220
查看次数

标签 统计

python ×5

printing ×1

python-3.x ×1

stdout ×1

version ×1