> 백엔드 개발 > 파이썬 튜토리얼 > Python 예외 및 파일 처리 메커니즘에 대한 자세한 설명

Python 예외 및 파일 처리 메커니즘에 대한 자세한 설명

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-08-04 08:55:38
원래의
1511명이 탐색했습니다.

이 문서의 예에서는 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
True

로그인 후 복사
f를 닫은 후 검색() 및 기타 작업을 수행하면 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를 사용하려면 다음 방법을 사용할 수 있습니다.


>>> 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程序设计有所帮助。

관련 라벨:
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿