2012-04-07 19 views
55

Possible Duplicate:
“ValueError: zero length field name in format” error in Python 3.0,3.1,3.2ValueError: tên trường có độ dài bằng không ở định dạng trăn

Tôi đã bỏ ra hàng giờ cố gắng giải quyết vấn đề này nhưng vô ích. Tôi đọc số this guide. Tôi chưa tìm thấy bất kỳ ví dụ nào về cách thực hiện những gì tôi cần.

Khi tôi chạy kịch bản tôi nhận được lỗi này (một phần bỏ qua):

Traceback (...): 
    [...] 
    output.write("{: > 026,.18e} {: > 026,.18e}\n".format(x,y)) 
ValueError: zero length field name in format. 

Mã này được viết bằng python 2.6 hoặc 2.7 nhưng tôi chạy python 3.1. Làm thế nào tôi cần thay đổi định dạng đầu ra để nó hoạt động?

def f(x,y,a = 0.01): 
    return y/(a+x)-y**3 

def ekspEuler(N,dat): 
    output = open(dat,"w") 
    h = 3.0/N 
    x,y = 0,1 #zac.pogoj 

    for i in range(1,N+2): 
     output.write("{: > 026,.18e} {: > 026,.18e}\n".format(x,y)) 
     y += h*f(x,y) 
     x = i*h 
    output.close() 

Cảm ơn sự giúp đỡ của bạn.

+0

Vâng, bạn muốn làm gì *? Hoặc được hỏi khác, tại sao bạn không muốn định dạng '" {} {} "(x, y)'? – phihag

+0

Tôi vẫn gặp lỗi tương tự. – malganis

+0

Có phải vấn đề là có hai chỉ số trong một khung không? Tôi bỏ qua .18e và sau đó tôi nhận được OverflowError: (34, 'Kết quả số của chúng tôi phạm vi') – malganis

Trả lời

134

Rất có thể bạn đang chạy phiên bản Python cũ và không phải là phiên bản 3.1. Trong Python 2.6, bạn cần chỉ số trong thông số định dạng, như sau:

"{0} {1}\n".format(x,y) 

Cập nhật phiên bản Python của bạn lên phiên bản gần đây, tốt nhất là 2,7 hoặc 3,2 để khắc phục sự cố. Theo tài liệu, hãy để lại các chỉ số số should work in Python 3.1:

Changed in version 3.1: The positional argument specifiers can be omitted, so '{} {}' is equivalent to '{0} {1}'.

+0

Tôi đang chạy python 3.1.3 và tôi đang sử dụng Geanny. Tôi không biết cách cài đặt phiên bản 3.2. Tôi mới dùng Linux. – malganis

+0

Xin lỗi, tôi không biết Geanny * là gì. Bạn có nghĩa là biên tập viên [Geany] (http://www.geany.org/)? Trong mọi trường hợp, bạn có thể tìm ra phiên bản Python của bạn với 'import sys; print (sys.version)'. Có nhiều bản phân phối Linux, bạn đang sử dụng bản phân phối nào? – phihag

+0

Đó là Geany. Tôi đang sử dụng Ubuntu 10.04. Bạn đa đung. Tôi đang sử dụng 2.6.5. Tôi đã thử với điều này: output.write ("{0:> 026, .18e} {1:> 026, .18e} \ n" .format (x, y)) Và tôi nhận được ValueError: Thông số chuyển đổi không hợp lệ – malganis

Các vấn đề liên quan