Câu trả lời:
Bạn có thể kiểm tra cú pháp bằng cách biên dịch nó:
python -m py_compile script.py
python -m compileall
cũng có thể làm các thư mục đệ quy và có giao diện dòng lệnh tốt hơn.
-m py_compile
có mặt, tôi thấy rằng -B
cũng không PYTHONDONTWRITEBYTECODE
ngăn chặn việc tạo tệp .pyc .
Bạn có thể sử dụng các công cụ này:
import sys
filename = sys.argv[1]
source = open(filename, 'r').read() + '\n'
compile(source, filename, 'exec')
Lưu cái này dưới dạng checker.py và chạy python checker.py yourpyfile.py
.
Đây là một giải pháp khác, sử dụng ast
mô-đun:
python -c "import ast; ast.parse(open('programfile').read())"
Để làm điều đó rõ ràng từ trong tập lệnh Python:
import ast, traceback
filename = 'programfile'
with open(filename) as f:
source = f.read()
valid = True
try:
ast.parse(source)
except SyntaxError:
valid = False
traceback.print_exc() # Remove to silence any errros
print(valid)
Có lẽ trình kiểm tra trực tuyến hữu ích PEP8: http://pep8online.com/
Pyflakes làm những gì bạn yêu cầu, nó chỉ kiểm tra cú pháp. Từ các tài liệu:
Pyflakes đưa ra một lời hứa đơn giản: nó sẽ không bao giờ phàn nàn về phong cách, và nó sẽ cố gắng rất, rất khó để không bao giờ phát ra những thông tin sai lệch.
Pyflakes cũng nhanh hơn Pylint hoặc Pychecker. Điều này phần lớn là do Pyflakes chỉ kiểm tra cây cú pháp của từng tệp riêng lẻ.
Để cài đặt và sử dụng:
$ pip install pyflakes
$ pyflakes yourPyFile.py
vì một số lý do (tôi là một người mới chơi py ...) cuộc gọi -m không hoạt động ...
Vì vậy, đây là một gói bash func ...
# ---------------------------------------------------------
# check the python synax for all the *.py files under the
# <<product_version_dir/sfw/python
# ---------------------------------------------------------
doCheckPythonSyntax(){
doLog "DEBUG START doCheckPythonSyntax"
test -z "$sleep_interval" || sleep "$sleep_interval"
cd $product_version_dir/sfw/python
# python3 -m compileall "$product_version_dir/sfw/python"
# foreach *.py file ...
while read -r f ; do \
py_name_ext=$(basename $f)
py_name=${py_name_ext%.*}
doLog "python3 -c \"import $py_name\""
# doLog "python3 -m py_compile $f"
python3 -c "import $py_name"
# python3 -m py_compile "$f"
test $! -ne 0 && sleep 5
done < <(find "$product_version_dir/sfw/python" -type f -name "*.py")
doLog "DEBUG STOP doCheckPythonSyntax"
}
# eof func doCheckPythonSyntax
import script
, nhưng tất cả các mã phải có trong các chức năng. Đó là thực hành tốt anyway. Tôi thậm chí đã áp dụng điều này cho các kịch bản shell. Từ đây là một bước nhỏ để thử nghiệm đơn vị.