tôi dường như không thể có được timeit.timeit
để làm việc khi tôi có trường hợp ngoại lệ trong đối số tuyên bố thông qua như là chuỗi:Sử dụng dấu chấm phẩy bên timeit
# after the first and third semicolon, I put 4 spaces
timeit.timeit('try:; a=1;except:; pass')
Điều này dẫn đến:
Traceback (most recent call last):
File "a.py", line 48, in <module>
timeit.timeit('try:; a=1;except:; pass')
File "C:\CPython33\lib\timeit.py", line 230, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "C:\CPython33\lib\timeit.py", line 136, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
try:; a=1;except:; pass
^
SyntaxError: invalid syntax
Tôi chạy nó với Python 3.3, nhưng cùng một lỗi xảy ra ngay cả với Python cũ (3.2).
UPDATE:
Tôi đã sau this documentation (tôi nhấn mạnh):
lớp timeit.Timer (stmt = 'pass', thiết lập = 'pass', hẹn giờ =)
Lớp cho tốc độ thực thi thời gian của các đoạn mã nhỏ.
Hàm khởi tạo có một câu lệnh được định thời gian, một câu lệnh bổ sung được sử dụng để thiết lập và chức năng hẹn giờ. Cả hai câu lệnh đều mặc định là 'vượt qua'; chức năng hẹn giờ phụ thuộc vào nền tảng (xem mô-đun tài liệu chuỗi). stmt và thiết lập cũng có thể chứa nhiều câu lệnh được phân cách bởi; hoặc dòng mới, miễn là chúng không chứa chuỗi nhiều dòng chữ.
Cảm ơn bạn .. bạn có thể kiểm tra câu hỏi được cập nhật không? Và trên thực tế 'timeit.timeit ('a = 1; b = 1')' hoạt động tốt ... – max
@max - Dấu chấm phẩy sẽ hoạt động tốt để tách các câu lệnh có cùng mức thụt đầu dòng, nhưng bất kỳ dấu cách hoặc tab nào bạn đặt giữa dấu chấm phẩy và câu lệnh tiếp theo sẽ bị bỏ qua để bạn không thể sử dụng chúng với thụt đầu dòng. –
@max, ';' sẽ không hoạt động để thử/trừ, đối với vòng lặp, trong khi vòng lặp, nếu khối, vv Nó chỉ hoạt động để tách các câu lệnh đơn giản. –