Python 초보 자가 입문 할 때 가장 범 하기 쉬 운 오류 요약
Python 은 간단 하고 알 기 쉬 운 문법 형식 으로 다른 언어 와 선명 한 대 비 를 이 루 었 습 니 다.초보 자 들 이 가장 많이 겪 는 문 제 는 Python 의 규칙 에 따라 쓰 지 않 는 것 입 니 다.프로 그래 밍 경험 이 있 는 프로그래머 라 도 고유 한 사고 와 문법 형식 에 따라 Python 코드 를 쓰기 쉽 습 니 다.예전 에 작은 편 에서'Python 초보 자 들 이 저 지 르 기 쉬 운 몇 가지 오류 요약'한 편 을 공 유 했 지만 전면적 이지 못 했 습 니 다.최근 에 한 외국 젊은이 가 사람들 이 자주 저 지 르 는 실 수 를 정리 하 는 것 을 보 았 다.16 Common Python Runtime Errors Beginners Find차라리 내 가 그 를 번역 하고 원래 의 기초 에서 나의 이 해 를 보충 했다.네가 이 구 덩이 를 피 할 수 있 기 를 바란다.
0、가짜 쓰 는 것 을 잊어버리다
if,elif,else,for,while,class,def 문장 뒤에":"를 추가 하 는 것 을 잊 어 버 립 니 다.
if spam == 42
print('Hello!')
발생:SyntaxError:잘못된 구문1.오용"="등 값 비교
"="은 할당 작업 이 고 두 값 이 같 는 지 판단 하 는 것 은"=="입 니 다.
if spam = 42:
print('Hello!')
발생:SyntaxError:잘못된 구문2.잘못된 들 여 쓰기 사용
Python 은 코드 블록 을 들 여 쓰기 로 구분 합 니 다.일반적인 오류 용법:
print('Hello!')
print('Howdy!')
초래:IndentationError: unexpected indent
.같은 코드 블록 의 모든 줄 코드 는 일치 하 는 축 량 을 유지 해 야 합 니 다.
if spam == 42:
print('Hello!')
print('Howdy!')
초래:IndentationError: unindent does not match any outer indentation level
.코드 블록 이 끝 난 후 들 여 쓰기 가 원래 위치 로 복 구 됩 니 다.
if spam == 42:
print('Hello!')
로 인 한:IndentationError: expected an indented block
,":"뒤에 들 여 쓰기 사용 하기3.변수 가 정의 되 지 않 음
if spam == 42:
print('Hello!')
초래:NameError: name 'spam' is not defined
4,목록 요소 인덱스 위치 가 져 오기 len 호출 방법 잊 어 버 리 기색인 위 치 를 통 해 요 소 를 가 져 올 때 len 함수 로 목록 의 길 이 를 가 져 오 는 것 을 잊 어 버 립 니 다.
spam = ['cat', 'dog', 'mouse']
for i in range(spam):
print(spam[i])
초래:TypeError: range() integer end argument expected, got list
.정확 한 방법 은:
spam = ['cat', 'dog', 'mouse']
for i in range(len(spam)):
print(spam[i])
물론 더 Pythonic 의 표기 법 은 enumerate 를 사용한다.
spam = ['cat', 'dog', 'mouse']
for i, item in enumerate(spam):
print(i, item)
5.문자열 수정문자열 은 하나의 시퀀스 대상 으로 색인 으로 요 소 를 가 져 오 는 것 을 지원 하지만 목록 대상 과 달리 문자열 은 변경 할 수 없 는 대상 이 며 수정 은 지원 되 지 않 습 니 다.
spam = 'I have a pet cat.'
spam[13] = 'r'
print(spam)
초래:TypeError: 'str' object does not support item assignment
정확 한 방법 은:
spam = 'I have a pet cat.'
spam = spam[:13] + 'r' + spam[14:]
print(spam)
6.문자열 과 비 문자열 연결
num_eggs = 12
print('I have ' + num_eggs + ' eggs.')
초래:TypeError: cannot concatenate 'str' and 'int' objects
문자열 이 비 문자열 과 연 결 될 때 비 문자열 대상 을 문자열 형식 으로 강제로 변환 해 야 합 니 다.
num_eggs = 12
print('I have ' + str(num_eggs) + ' eggs.')
문자열 의 포맷 형식 을 사용 하거나
num_eggs = 12
print('I have %s eggs.' % (num_eggs))
7.잘못된 색인 위치 사용
spam = ['cat', 'dog', 'mouse']
print(spam[3])
초래:IndexError: list index out of range
목록 대상 의 색인 은 0 에서 시작 되 며,세 번 째 요 소 는 spam[2]로 접근 해 야 합 니 다.8.사전 에 존재 하지 않 는 키 사용
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam['zebra'])
사전 대상 에서 key 를 방문 하면[]을 사용 할 수 있 습 니 다.그러나 이 key 가 존재 하지 않 으 면:KeyError: 'zebra'
올 바른 방법 은 get 방법 을 사용 해 야 합 니 다.
spam = {'cat': 'Zophie', 'dog': 'Basil', 'mouse': 'Whiskers'}
print('The name of my pet zebra is ' + spam.get('zebra'))
키 가 존재 하지 않 을 때 get 기본 값 으로 돌아 가기 None9.키워드 로 변수 이름 만 들 기
class = 'algebra'
초래:SyntaxError: invalid syntax
Python 에 서 는 키 워드 를 변수 이름 으로 사용 할 수 없습니다.Python 3 에는 모두 33 개의 키워드 가 있 습 니 다.
>>> import keyword
>>> print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
10.함수 중 부분 변수 할당 전에 사 용 됩 니 다.
someVar = 42
def myFunction():
print(someVar)
someVar = 100
myFunction()
초래:UnboundLocalError: local variable 'someVar' referenced before assignment
함수 에 전역 역할 영역 과 같은 이름 의 변수 가 있 을 때 LEGB 순서대로 이 변 수 를 찾 습 니 다.함수 내부 의 부분 역할 영역 에서 도 같은 이름 의 변 수 를 정의 하면 외부 역할 영역 에서 찾 지 않 습 니 다.따라서 my Function 함수 에서 someVar 가 정의 되 었 기 때문에 print(someVar)는 밖에서 찾 지 않 습 니 다.그러나 print 를 할 때 이 변 수 는 값 을 부여 하지 않 아서 Unbound LocalError 가 발생 했 습 니 다.11.자체 증가"+"자체 감소"-"사용
spam = 0
spam++
하하,Python 에는 자체 감소 연산 자가 없습니다.만약 당신 이 C,자바 에서 돌 아 왔 다 면 주의해 야 합 니 다."+="을 사용 하여"+"를 대체 할 수 있 습 니 다.
spam = 0
spam += 1
12.클래스 의 방법 을 잘못 호출 합 니 다.
class Foo:
def method1():
print('m1')
def method2(self):
print("m2")
a = Foo()
a.method1()
초래:TypeError: method1() takes 0 positional arguments but 1 was given
method 1 은 foo 류 의 한 구성원 방법 입 니 다.이 방법 은 어떠한 매개 변수 도 받 아들 이지 않 습 니 다.a.method 1()을 호출 하 는 것 은 foo.method 1(a)을 호출 하 는 것 과 같 지만 method 1 은 어떠한 매개 변수 도 받 아들 이지 않 아서 잘못 보 고 했 습 니 다.정확 한 호출 방식 은 Foo.method 1()일 것 입 니 다.주의해 야 할 것 은 상기 코드 는 모두 Python 3 을 바탕 으로 하 는 것 입 니 다.Python 2 에서 같은 코드 에 나타 난 오류 도 다 릅 니 다.특히 마지막 예 입 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 python 사용 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.