Cân nhắc hai đoạn mã sau:SyntaxError không nhất quán trong Python?
try:
a+a=a
except SyntaxError:
print "first exception caught"
.
try:
eval("a+a=a")
except SyntaxError:
print "second exception caught"
Trong trường hợp thứ hai, câu lệnh "ngoại lệ thứ hai .." được in (ngoại lệ bị bắt), trong khi câu lệnh thứ nhất không được.
Ngoại lệ đầu tiên (cho phép gọi nó là "SyntaxError1") bất kỳ khác biệt nào với phiên bản thứ hai ("SyntaxError2")?
Có cách nào để bắt SyntaxError1 (do đó có lỗi thời gian biên dịch) không? Gói khối lượng lớn các mã trong eval
là không đạt yêu cầu;)
Ngăn chặn các lỗi biên dịch thời gian ???? Điều đó có thể có ý nghĩa gì? Bạn có thể cung cấp một số định nghĩa cho trường hợp sử dụng mà bạn muốn mã không thể phân tích để phân tích cú pháp không? Điều gì được cho là sẽ xảy ra? Mã có thể xấu đến mức nào nhưng vẫn được "phân tích cú pháp"? Bạn đang nói về cái gì vậy? –
Câu hỏi đã được tập trung chủ yếu vào sự không nhất quán có thể có của SyntaxErrors ném trong tình huống khác nhau. Alex giải thích rằng không có mâu thuẫn ở tất cả, và tất cả các hành vi được mô tả bao gồm trong các cơ chế của trình biên dịch xây dựng cấu trúc cấp cao hơn của try/except. Một trường hợp sử dụng có thể xảy ra có thể được tải lên bởi một nhà phát triển đáng tin cậy * tệp .py với một số chức năng (hệ thống plugin đơn giản?), Với sự cần thiết xác thực cú pháp của nó ngay sau khi tải lên. – gorsky