이 문서의 예에서는 Python 예외 및 파일 처리 메커니즘을 설명합니다. 참고하실 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
1 예외 처리
Python에서의 예외 사용
시도해 보세요
제외
드디어
그리고 Except 뒤에 else 가 올 수도 있습니다.
예외를 발생시키려면 raise를 사용하세요
발생한 예외가 처리되지 않으면 Python IDE에 빨간색 정보가 표시됩니다. 이로 인해 프로그램이 종료됩니다.
이전에 몇 가지 이상 현상을 목격했습니다.사용된 키가 사전에 없으면 KeyError 예외가 발생합니다. 예:
>>> d = {"a":1, "b":"abc"} >>> d["c"] Traceback (most recent call last): File "<interactive input>", line 1, in <module> KeyError: 'c'목록에 없는 값을 검색하면 ValueError 예외가 발생합니다. 예:
>>> li = [1,2] >>> li.index(3) Traceback (most recent call last): File "<interactive input>", line 1, in <module> ValueError: list.index(x): x not in list에 해당합니다. 아래 첨자를 사용하여 목록의 요소를 참조하는 경우 아래 첨자가 범위를 벗어나면 IndexError 예외가 생성됩니다.
>>> li[2] Traceback (most recent call last): File "<interactive input>", line 1, in <module> IndexError: list index out of range존재하지 않는 메소드를 호출하면 AttributeError 예외가 발생합니다.
존재하지 않는 변수를 참조하면 NameError 예외가 발생합니다.
강제 없이 데이터 유형을 혼합하면 TypeError 예외가 발생합니다.
파일 작업 오류로 인해 발생한 IOError:
try: fsock = open("/notthere") except IOError: print "The file dose not exits..." else: print "open the file." print "this line will always print"위 코드의 참고사항:
open은 파일을 여는 데 사용되는 내장 함수입니다.
try Except 뒤에 else 문이 올 수 있습니다. 지정된 예외가 catch되지 않으면 else 문이 실행됩니다.
모듈을 가져올 때 모듈이 없으면 ImportError 예외가 발생합니다.
자신만의 예외 클래스를 정의할 수도 있습니다. 그런 다음 예외를 발생시켜야 할 때 raise를 사용하세요.
2 파일 개체 작업앞서 언급했듯이 open은 파일을 열고 파일 객체를 반환하는 데 사용할 수 있습니다.
open(name[, mode[, buffering]])에는 3개의 매개변수가 있습니다(마지막 두 개는 선택사항임). 이들은 각각 파일 이름, 열기 방법 및 버퍼 매개변수를 나타냅니다. 예:
>>> f = open("/music/_singles/kairo.mp3", "rb")두 번째 매개변수는 "rb"로 지정됩니다. 이는 파일을 바이너리 읽기 모드로 여는 것을 의미합니다.
열 수 없는 경우 open은 IOError 예외를 발생시킵니다.
이제 이름 속성과 모드 속성을 사용하여 파일 개체를 쿼리할 수 있습니다. 예:
>>> f.name '/music/_singles/kairo.mp3' >>> f.mode 'rb'파일을 연 후 읽고 쓸 수 있습니다. 예:
>>> f.tell()현재 위치를 쿼리합니다.
0 >>> f.seek(0, 2)파일 포인터의 위치를 지정합니다. 두 번째 매개변수는 1. 2의 세 가지 값을 가질 수 있습니다.
찾은 주소가 잘못된 경우(예: 범위 초과) IOError 예외가 발생합니다.
따라서 이 명령문은 파일 포인터를 파일 끝으로 이동합니다.
>>> f.tell()파일 길이를 출력합니다.
>>> f.seek(-128, 2) >>> data = f.read(128)파일의 마지막 128바이트를 읽고 읽은 데이터를 문자열로 반환합니다.
read 매개변수는 읽을 최대 바이트 수를 나타냅니다. 이 매개변수는 파일 끝까지 읽는다는 의미도 있습니다.
읽는 동안 오류가 발생하면(예: 디스크의 불량 섹터 또는 네트워크 연결 끊김) IOError 예외가 발생합니다.
>>> f.closed파일이 닫혀 있는지 확인하세요.
False >>> f.close()더 이상 사용하지 않을 때는 파일을 닫아야 합니다. 이미 닫은 파일은 다시 닫을 수 있습니다(예외 발생 없음).
>>> f.closed Truef를 닫은 후 검색() 및 기타 작업을 수행하면 ValueError 예외가 발생합니다. 파일을 쓰는 방법은 읽는 것과 유사합니다. 그러나 "쓰기"를 위해서는 파일을 열어야 합니다. 예:
>>> f1 = open('test.log', 'w')여기서 'w'는 쓰기용으로 열기를 의미합니다. 이렇게 하면 파일이 존재하지 않더라도 기존 파일을 덮어쓰게 됩니다.
>>> f1.write('abc') >>> f1.close() >>> file('test.log').read()file()로 파일을 여는 것은 open()으로 파일을 여는 것과 같습니다.
'abc'
3 for 루프Python에서는 목록을 순회하는 데 사용됩니다. 예:
>>> li = [1, 2, 3] >>> for i in li:이렇게 하면 루프에서 li에 있는 요소의 값을 차례로 받을 수 있습니다.
... i 인쇄
...
1
2
3
이 출력은 print "n".joni(li)와 동일합니다.
>>> for i in range(len(li)) : print li[i] ... 1 2 3다음과 같이 사전을 탐색하는 데 사용됩니다.
>>> d = {1:"abc", 2:"def"} >>> for k, v in d.items() : print "%d = %s" % (k, v) ... 1 = abc 2 = def위의 인쇄 결과는 print "n".join(["%d = %s" % (k, v) for k, v in d.items()])와 같습니다. 4 sys.modules 사용
Python에서 모듈은 sys 모듈에 정의된 전역 사전 객체입니다.
모듈을 가져오면 sys.modules에서 찾을 수 있습니다.
각 클래스에는 내장된 "클래스 속성"( __module__ )이 있습니다. 해당 값은 클래스를 정의하는 모듈의 이름입니다.
5 디렉토리 작업os.path가 참조하는 모듈에는 파일과 디렉터리를 운영하기 위한 여러 기능이 있습니다. 예:
这个join函数用来将一个或多个字符串构造成一个路径名.
'c:\music\mahadeva.mp3' >>> os.path.expanduser("~")
expanduser函数用'~'作参数时. 返回当前用户根目录.
'c:\Documents and Settings\mpilgrim\My Documents'
>>> (filepath, filename) = os.path.split("c:\music\a.mp3")
split函数用来将一个路径名分成目录名和文件名. 它返回的是一个tuple. 用返回的tuple对(filepath, filename)赋值.
>>> filepath 'c:\music' >>> filename 'a.mp3' >>> (a, b) = os.path.splitext("a.mp3")
类似的. 这个splitext用来将一个全文件名分成 文件名 和 扩展名 两部分.
>>> a 'a' >>> b '.mp3'
列出目录用:
>>> os.listdir("c:\")
这个函数将返回一个字符串list. 包括所有的文件和文件夹的名字.
['boot.ini', 'CONFIG.SYS', 'AUTOEXEC.BAT', 'java', 等]
要判断一个字符串路径到底是一个文件还是一个文件夹. 用os.path模块中的 isfile() 或 isdir(). 如:
>>> [f for f in os.listdir("c:") if os.path.isdir(os.path.join("c:", f))]
这样就打印出c中所有文件夹名构成的list.
如果要在目录操作中使用通配符. 可以如下:
>>> import glob
要先导入 glob 模块
>>> glob.glob('c:\music\*.mp3')
则返回的list中包含了该目录下所有的 .mp3 后缀的文件名.
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。