문제

나는 유효하지 않은 인수 오류가 무엇인지, 그리고 그 원인이 무엇인지에 대한 좋은 설명을 찾기 위해 많은 노력을 기울이지 않았습니다.

현재 작업 중인 샘플은 다음과 같습니다.

import sys
mylog="mylog.log"
sys.stdout = open(mylog,'w')
#lots of code
#.
#.
#.
#End of lots of code
from time import clock
print "blablabla",clock()

클럭 라인에서 IOError Invalid Argument 오류가 발생했습니다.나는 또한 시도했다

print "blablabla\t%s"%clock()

이 오류에 대한 정보는 큰 도움이 될 것입니다.해당 라인은 단기 실행에서는 완벽하게 작동하지만 잠시 동안 코드를 실행한 직후에 중단됩니다.나는 버퍼 크기를 45-100줄 정도로 낮게 설정하려고 했습니다.

도움이 되었습니까?

해결책

내 컴퓨터에서 이 정확한 문제를 재현할 수 없기 때문에 구체적인 조언을 드릴 수는 없지만, 이런 종류의 문제를 디버깅하는 방법에 대한 일반적인 설명은 다음과 같습니다.

Python의 IOError 또는 OSError 예외에서 "잘못된 인수"가 표시되면 인터프리터가 시스템 호출을 시도했지만 실패하고 설정되었음을 의미합니다. errno 코드에 EINVAL.(접하게 말하면, 파이썬은 실제로 errno 코드에 대한 숫자 값을 인쇄해서는 안 됩니다. 기호 이름은 표준화되어 있지만 숫자는 그렇지 않습니다.) 가장 먼저 해야 할 일은 그것이 어떤 시스템 호출인지 알아내는 것이고, 가장 쉬운 방법은 그렇게 하려면 다음에서 프로그램을 실행하세요. strace 유틸리티는 다음과 같습니다.

$ strace -f -o strace.log python yourscript.py [arguments...]

실패할 때까지 기다린 후 파일을 검색하세요. strace.log "-1 E"(정확히 해당 문자열)입니다.다음과 같은 내용을 찾을 수 있습니다.

times({tms_utime=162, tms_stime=123, tms_cutime=0, tms_cstime=0}) = 1718279979
write(1, "2.85\n", 5)                   = -1 EINVAL (Invalid argument)

그런 다음 실패한 시스템 호출에 대한 매뉴얼 페이지를 읽습니다("man 2 write" 이 경우) errno 코드 이름(EINVAL 이 경우) 무엇이 잘못되었는지 확인하세요.

이 경우 Python 인터프리터나 운영 체제에서 버그를 발견한 것으로 의심됩니다."잘못된 인수"는 시스템 호출에 대한 입력 인수 중 하나에 잘못된 값이 있다는 의미입니다.스크립트에서 까다로운 작업을 수행하지 않아서 인터프리터가 시스템 호출을 엉망으로 만들었거나 커널이 인터프리터가 원하는 것을 오해했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top