2014-06-16 18 views
7

Tôi đã cố gắng khắc phục và không thể tìm thấy lý do lỗi xuất hiện. Pmin, Pmax, w, fI1 và Fi2 đều được gán các giá trị hữu hạn'Lỗi cú pháp: cú pháp không hợp lệ' vì không có lý do rõ ràng

guess=Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2) 

Khi tôi loại bỏ dòng này từ mã, các lỗi tương tự xuất hiện ở dòng tiếp theo của mã này, một lần nữa không có lý do tôi có thể nghĩ ra

Edit: đây là đoạn mã tôi đã đề cập đến: def PSAT (bản thân, T):

 pop= self.getPborder(T) 
     boolean=int(pop[0]) 

     P1=pop[1] 
     P2=pop[2] 
     if boolean: 
      Pmin = float(min([P1, P2])) 
      Pmax = float(max([P1, P2])) 
      Tr=T/self.typeMolecule.Tc 
      w=0.5*(1+scipy.tanh((10**5)*(Tr-0.6))) 
      fi1=0.5*(1-scipy.tanh(8*((Tr**0.4)-1))) 
      fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494 

      guess = Pmin+(Pmax-Pmin)*((1-w**2)*fi1+(w**2)*fi2) #error here 

      solution = scipy.optimize.newton(funcPsat,guess, args=(T,self)) 
+4

Bạn có thể đăng một đoạn mã lớn hơn không? Cảm ơn –

+0

Gốc của lỗi có thể xảy ra phía trên dòng bạn đã đăng. Bạn có thể đăng thêm một chút mã không? – Bryan

+0

và traceback đầy đủ –

Trả lời

30

Đối với vấn đề mà nó có vẻ là một lỗi trên một dòng bạn nghĩ là đúng, bạn thường có thể xóa/nhận xét dòng có lỗi xuất hiện và, nếu lỗi chuyển sang dòng tiếp theo, có hai khả năng.

Hoặc cả hai dòng đều gặp sự cố hoặc dòng trước có sự cố đang được chuyển tiếp. Nhiều nhất khả năng là trường hợp là tùy chọn thứ hai (thậm chí nhiều hơn như vậy nếu bạn xóa một dòng khác và di chuyển lại).

Ví dụ, chương trình Python sau twisty_passages.py:

xyzzy = (1 + 
plugh = 7 

tạo ra các lỗi:

File "twisty_passages.py", line 2 
    plugh = 7 
     ^
SyntaxError: invalid syntax 

bất chấp những vấn đề rõ ràng là trên dòng 1.


Đặc biệt của bạn trường hợp, số vấn đề. Các dấu ngoặc đơn trong dòng trước dòng lỗi của bạn là chưa từng có, theo đoạn sau đây:

# open parentheses: 1 2    3 
#     v v    v 
fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494 
#        ^   ^
# close parentheses:   1    2 

Tùy thuộc vào những gì bạn đang cố gắng để đạt được, giải pháp thể thể đơn giản như chỉ cần thêm bế mạc khác dấu ngoặc đơn ở cuối, để đóng chức năng sqrt.

Tôi không thể nói cho nhất định vì tôi không nhận ra biểu thức trên đầu của tôi. Thật đáng ngạc nhiên nếu (giả sử PSAT là enzyme, và việc sử dụng mã định danh typeMolecule) nó liên quan đến sinh học phân tử - tôi dường như nhớ lại Sinh học không ổn định trong tuổi trẻ của tôi :-)

+2

Tôi đã tìm thấy lỗi, có một khung bị thiếu ở một trong các dòng trước đó. Cảm ơn sự giúp đỡ –

+1

Trong trường hợp của tôi, tôi đã thiếu khung đóng của dòng trước, Cảm ơn rất nhiều. –

2

Bạn đang thiếu một dấu ngoặc kép gần dòng này:

fi2=0.460*scipy.sqrt(1-(Tr-0.566)**2/(0.434**2)+0.494 

Có ba (và chỉ hai).
Tôi hy vọng Điều này sẽ giúp bạn.

+0

Trường hợp của tôi được phân loại là "dòng trước có vấn đề đang được chuyển tiếp" theo paxdiablo. Những gì tôi đã làm để tìm lỗi là bằng cách bình luận dòng bởi dòng lên trên mã cho đến khi lỗi cú pháp biến mất tạm thời. Dòng cuối cùng mà tôi đưa ra đánh dấu nhận xét là một trong những người gây ra lỗi. –

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