2012-05-10 1 views
5

Các tập lệnh python của tôi chạy tốt từ IDLE, nhưng khi tôi cố gắng chạy chúng từ dòng lệnh, mọi thứ trở nên sai. Đầu tiên tôi gặp vấn đề khi nhập pygame, nhưng tôi đã thêm C: \ Python27 \ Lib \ site-packages vào biến môi trường PYTHONPATH và tất cả đều tốt, tôi nghĩ. Tuy nhiên, bây giờ khi tôi cố gắng chạy một cái gì đó từ dòng lệnh, tôi nhận được điều này:Python không thể xử lý việc nhập thông qua dòng lệnh

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 

Bất kỳ ý tưởng nào?

Đây không phải là vấn đề địa phương hóa; khi tôi cố gắng chạy một kịch bản từ dòng lệnh, tôi có được điều này:

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 

và cú pháp đó chắc chắn là OK ...

Pong.py bắt đầu như thế này:

#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() 
+0

Bạn có chắc chắn rằng tập lệnh chính xác giống như tập lệnh bạn đang chạy từ IDE không? Có vẻ như câu lệnh if nằm trên đường sai từ stactkrace. –

+0

Đó là kịch bản chính xác, câu lệnh if không nằm trong tệp của tôi! Đó là trong C: \ Python27 \ Lib \ ntpath.py. Cú pháp đó có vẻ kỳ lạ với tôi ... – ian93

+0

Tại sao bạn sử dụng 'ntpath' thay cho' os.path'? – japreiss

Trả lời

10

Điều này nghe có vẻ như tôi có hai phiên bản Python khác nhau trên máy tính của bạn. Một là phiên bản mới hơn chấp nhận phiên bản của biểu thức ternary của Python, và một phiên bản cũ hơn. Khi bạn sử dụng IDLE, phiên bản mới hơn được gọi. Khi bạn sử dụng dòng lệnh, phiên bản cũ hơn được gọi. Bạn có thể xác nhận hoặc bác bỏ giả thuyết này bằng cách chạy python -V từ dòng lệnh.

Để xây dựng, hỗ trợ cho các biểu thức có điều kiện đã được thêm vào trong Python 2.5. Vì vậy, khi bạn sửa đổi PYTHONPATH, bạn vết thương lên chạy một tập tin python mới hơn (từ 2,7, nó âm thanh như) với một phiên bản cũ của python (2.4, theo thử nghiệm của bạn).

+1

Chỉ cần nhận xét về điều này ở trên ... Bây giờ tôi phải theo dõi phiên bản cũ ... – ian93

+0

Có, tôi đã tìm thấy nó ... thủ phạm là Lilypond, đang chạy một Python24 exe riêng biệt và đã thêm thư mục bin của nó vào PATH phía trước thùng Python27 của tôi. Vì vậy, tôi loại bỏ nó và tất cả là tốt. Cảm ơn sự giúp đỡ của các bạn! – ian93

0

Đảm bảo mã lệnh dòng lệnh của bạn ít nhất là phiên bản 2.5 vì trước đó, không có toán tử bậc ba (http://marc-abramowitz.com/archives/2008/05/18/python-ternary-operator /).

+0

Vâng, đó là vấn đề, kinda. – ian93