5

我的 python 脚本在 IDLE 中运行良好,但是当我尝试从命令行运行它们时,出现了问题。首先我在导入 pygame 时遇到了麻烦,但我将 C:\Python27\Lib\site-packages 添加到 PYTHONPATH 环境变量中,一切都很好,我想。但是,现在当我尝试从命令行运行某些东西时,我得到了这个:

C:\Users\Ian Sinke\Documents\Pong>python pong.py
'import site' failed; use -v for traceback
Traceback (most recent call last):
  File "pong.py", line 3, in ?
    import pygame
  File "C:\Python27\Lib\site-packages\pygame\__init__.py", line 27, in ?
    import sys, os, string
  File "C:\Python27\Lib\os.py", line 63, in ?
    import ntpath as path
  File "C:\Python27\Lib\ntpath.py", line 401
    backslash, dot = (u'\\', u'.') if isinstance(path, unicode) else ('\\', '.')

                                    ^
SyntaxError: invalid syntax

有任何想法吗?

这不是本地化问题;当我尝试从命令行运行另一个脚本时,我得到了这个:

C:\Users\Ian Sinke\Documents>python app.py
'import site' failed; use -v for traceback
Traceback (most recent call last):
  File "app.py", line 4, in ?
    import urllib2
  File "C:\Python27\Lib\urllib2.py", line 92, in ?
    import base64
  File "C:\Python27\Lib\base64.py", line 346
    with open(args[0], 'rb') as f:
            ^
SyntaxError: invalid syntax

那语法肯定没问题...

Pong.py 的开头是这样的:

#import sys
import math
import pygame
import time
from pygame.locals import *

# Helper functions
def centerdist(paddletop, balltop):
    return balltop - paddletop - 30

# Constants
BLACK = 0, 0, 0

pygame.init()
4

2 回答 2

10

在我看来,这听起来就像您的计算机上有两个不同版本的 Python。一个是接受 Python 版本的三元表达式的更新版本,一个是旧版本。当您使用 IDLE 时,会调用较新的版本。使用命令行时,会调用旧版本。python -V您可以通过从命令行运行来确认或反驳这个假设。

为了详细说明,在Python 2.5中添加了对条件表达式的支持。因此,当您修改 时PYTHONPATH,您最终会使用旧版本的 python(根据您的测试为 2.4)运行一个较新的 python 文件(听起来像是从 2.7 开始)。

于 2012-05-10T19:16:19.287 回答
0

确保您的命令行 python 至少是 2.5 版,因为在此之前,没有三元运算符 (http://marc-abramowitz.com/archives/2008/05/18/python-ternary-operator/)。

于 2012-05-10T19:23:15.373 回答