2010-01-22 15 views
9
#!/usr/bin/python 
str = "this" 
if(1): 
    print "Hi" 
else: 
    print str.any_random_function() 

To nie zawiedzie podczas uruchamiania programu. Próbowałem py_compile, ale to nie wskazywało na błąd w pętli "else". Teraz w jaki sposób mogę skompilować program i niezawodnie wykryć błędy w kodzie Pythona?Jak mogę sprawdzić błędy kompilacji w pythonie?

Dzięki.

+4

Nie sądzę, że można to zrobić w pytonie. Metody mogą być dodane dinamicznie, przechwycony wyjątek lub przeciążona metoda __getattr__. W każdym z tych przypadków twój błąd będzie całkowicie zależny od informacji o środowisku wykonawczym. – fserb

+0

W rzeczywistości ten konkretny przykład powinien zostać przechwycony przez pylinta. – Geo

+1

Nie zawodzi, ponieważ nie jest źle. Twój moduł może zostać zaimportowany w kontekście, w którym 'any_random_function' jest poprawnie zdefiniowany dla wbudowanej klasy napisów. –

Odpowiedz

2

Python jest językiem dynamicznym, więc nie można po prostu sprawdzić kompilacji błędów, jak w językach statycznych (C/C++/Java). Jeśli przypiszesz str.any_random_function, powyższy kod będzie poprawny (w porządku, to zły przykład ...).

Proponuję użyć PyDev for Eclipse, który automatycznie znajdzie wiele typowych problemów w kodzie, takich jak brakujące funkcje/moduły itp. Obsługuje również pylint (opcjonalnie).

+0

W przypadku losowego magazynu kluczy można łatwo dodać znak do wywołania funkcji. Czy sugeruje się uruchamianie pylinta przez całą bazę kodu lub testy jednostkowe i 100% pokrycia kodu, aby złapać to nieprawidłowe wywołanie funkcji? Dzięki za odpowiedzi. – stacka

+0

Przyzwyczajenie się do pylintowania zajmuje trochę czasu i może powodować powstanie wielu (bezużytecznych) komunikatów, jeśli nie są skonfigurowane poprawnie. W każdym razie, jako dobry inżynier oprogramowania, zawsze powinieneś kierować się 100% pokryciem kodu przy użyciu testów jednostkowych. Zaletą jest to, że mogą być uruchamiane (pół) automatycznie - wiadomości pylint muszą być interpretowane przez ludzi. – AndiDog

+0

Zdecydowanie sugerowałbym również testy jednostkowe. –

Powiązane problemy