2017-09-25 11 views
0

(세 개의 인수/표현과 인상) 내부 예외는, help("raise")에 의해 문서화되고있다 내가 raise에 두 번째와 세 번째 표현을 제거 할 때pylint 구문 오류가 난이 최소 유효 프로그램을 찾고 있어요

$ pylint program.py 
************* Module tmp 
E: 7, 0: invalid syntax (<string>, line 7) (syntax-error) 

구문 오류가 사라 : 나는 그것에 pylint을 실행할 때, 이것은 내가 무엇을 얻을 수 있습니다.

이것은 pylint의 버그입니까? 아니면 뭔가 내려다보고 있습니까?

답변

1

Python 3 구문에 대한 pylint 이진 테스트에서 코드는 Python 2에만 유효합니다. Pylint는 파이썬 바이너리의 구문에 따라 코드를 테스트한다 (파이썬의 자체 파서를 사용한다).

파이썬 3에서는 사용하십시오 : 당신의 구문 파이썬 2 올바른 수 있지만

raise Exception().with_traceback(sys.exc_info()[2]) 

파이썬 3에 대한

raise statement 설명서를 참조하십시오, 당신은 기술적으로 잘못된 raise를 사용하는 . 3 요소를 전달할 때 첫 번째 요소는 인스턴스가 아닌 클래스이어야합니다. 두 번째는 그 클래스의 인스턴스이며, 세 번째 역 추적 :

raise Exception, Exception(), sys.exc_info()[2] 

또는 당신이 첫 번째 (클래스)에 전달 빈 인수 목록 None에 전달할 수 있습니다 인스턴스를 만들 :

raise Exception, None, sys.exc_info()[2] 

코드는 여전히 작동하지만, 파이썬이 너무 엄격하지 않고 클래스가 아닌 경우 첫 번째 인수를 인스턴스로 사용하기 때문에 코드가 작동합니다.

파이썬 2 코드를 pylint로 테스트하려면 파이썬 2 바이너리에 복사본을 설치하고 해당 버전을 실행하십시오. Specify which python version pylint should evaluate for

+0

python3으로 필립트를 어떻게 설치했는지 완전히 잊어 버렸습니다. 감사합니다! 'raise' 사용에 관해서는 내 컴퓨터의 문서에 명시 적으로 다음과 같이 명시되어 있습니다. 첫 번째 객체가 인스턴스 인 경우 예외의 유형이 인스턴스의 클래스이고 인스턴스 자체가 값이고 두 번째 객체는 "없음". " 이 문제가 버전간에 변경 되었습니까? – goncalopp