2010-04-21 22 views
13
[[email protected] git]# ./test.py 
    File "./test.py", line 4 
    with open("/home/git/post-receive-email.log",'a') as log_file: 
      ^
SyntaxError: invalid syntax 

kod şuna benzer:sözdizimi hatası

[[email protected] git]# more test.py 
#!/usr/bin/python 
from __future__ import with_statement 

with open("/home/git/post-receive-email.log",'a') as log_file: 
    log_file.write("hello world") 

ve ben

[[email protected] git]# python -V 
Python 2.5.5 
+0

not: bu sözdizimi python'da doğrudur 2.6.5 –

+1

Bu, 2.5 sürümünde de doğru ... Göndermediğiniz dosya için daha fazla içerik var mı? Snippet benim için iyi çalışıyor (2.5.4) –

+1

Snippet benim için de iyi çalışıyor. '/ Usr/bin/python -V' size ne anlatıyor? –

cevap

8

Python 2.5.5 kullanıyorum ne Doğru olmalı. Python 2.5, ifadesini __future__'dan alabileceğiniz bir şey olarak tanıttı. Kodunuz doğru olduğundan, aklıma gelen tek açıklama python sürümünüzün sizin düşündüğünüz gibi olmamasıdır. Sisteminizde yüklü olan birden fazla python sürümüne sahip olmanız ve kodunuzun eski bir sürümle çalışmasının bazı nedenleri vardır. bunu böyle çalıştırmayı deneyin:

[[email protected] git]# /usr/bin/python2.5 test.py 

bu işleri varsayarsak, istediğiniz piton hangi sürümünü belirtmek için ilk satırı değiştirebilir. Bu, python2.5 için doğrudan bir yol olabilir veya kullanıcının PATH değişkenini python2.5 için aramak için env komutunu kullanabilirsiniz. Doğru yaklaşım, sistemlerin python'unun ne yüklediğine bağlıdır. İşte 2 yaklaşımlar şunlardır:

doğrudan /usr/bin/python2.5 kullanmak için, bunu yapabilirsiniz:

#!/usr/bin/python2.5 

PATH içinde önce gerçekleşirse python2.5 hangisi sürümünü kullanmak için, bunu :

#!/usr/bin/env python2.5 
+0

evet Birden çok sürümüm var ve işe yaradı. Ben bir git post taahhüt kanca için bunu kullanıyorum bu yüzden "./test.py" – Tony

+0

yapmak istediğinizi doğrulamak için shebang satırını değiştirerek düzeltilebilir olduğunu söylemek istiyorum cevabınızı düzenlemek isteyebilirsiniz düşünüyorum piton. Teşekkürler! – Tony

+0

İyi nokta. Eklediğim yazıyı düzenledim; İşaret ettiğin için teşekkürler. – Benson

3

Belki böyle mi? Bu soruya verilen yanıt OP'nin yorumlarına gömülür

1

. @Tamas bir kez yukarıda doğru çözümü verdi @Tony kodunun 2.4:

tarafından gerçekleştirildiğini onayladı. Yani, /usr/local/bin/python 2.5.5, ancak senaryonuzu 2.4.3 olan /usr/bin/python ile çağırıyorsun. shell shebang line bununla: #!/usr/bin/env python. " Genel olarak

, env komut icat edilmiştir bu yüzden vs. yani senin yolunu, /usr/bin, /usr/local/bin, hardcoding konusunda dikkatli olun. Özellikle, sisteminizde Python'un birden çok sürümü yüklü olduğunda önemlidir. Bununla birlikte, OP kodunun herhangi bir 2.5 ve daha yeni yorumlayıcıda yürütülmesi nedeniyle, eski bir Python sorunu olduğu oldukça açık bir hediye oldu. Bu sözdizimi hatası, Python'un hangi sürümüne bakılmaksızın kullandığını düşünün kullanıyor.