백엔드 개발 파이썬 튜토리얼 초보자가 Python을 처음 배우기 시작할 때 저지르는 일반적인 실수

초보자가 Python을 처음 배우기 시작할 때 저지르는 일반적인 실수

Jan 16, 2017 pm 04:23 PM

초보자가 Python 언어를 처음 배우기 시작하면 이런저런 실수를 하게 됩니다. 이제 막 Python을 배우기 시작한 친구들에게 관심을 주고자 여기에 몇 가지 요약을 만들었습니다.

문법 오류

문법 오류는 아마도 Python을 배울 때 저지르는 가장 흔한 실수일 것입니다.

>>> while True print "hi~"
  File "<stdin>", line 1    
  while True print "hi~"
               ^
SyntaxError: invalid syntax
로그인 후 복사

거기 화살표는 오류가 처음 발견된 곳을 가리킵니다. 여기서는 화요일 이후에 콜론

이 누락되었기 때문에 if, elif, else, for, while 끝에 추가하는 것을 잊었습니다. , class, def 문: ("SyntaxError: 잘못된 구문" 발생) 이 오류는 다음과 유사한 코드에서 발생합니다:

if spam == 42 print(&#39;Hello!&#39;)
로그인 후 복사

== 대신 = 사용("SyntaxError: 잘못된 구문" 발생) =는 할당 연산자이고 ==는 동등 비교 연산입니다. 다음 코드에서 오류가 발생합니다.

if spam = 42: print(&#39;Hello!&#39;)
로그인 후 복사

들여쓰기를 잘못 사용했습니다. ("IndentationError: 예기치 않은 들여쓰기", "IndentationError: unindent가 외부 들여쓰기 수준과 일치하지 않습니다" 및 "IndentationError: 들여쓰기된 블록이 필요함"이 발생함) 들여쓰기 증가는 다음으로 끝나는 문 후에만 사용되며 복원되어야 함을 기억하십시오. 이후에는 이전 들여쓰기 형식으로 변경됩니다. 이 오류는 다음 코드에서 발생합니다.

print(&#39;Hello!&#39;) 
   print(&#39;Howdy!&#39;)
로그인 후 복사

또는

if spam == 42: 
print(&#39;Hello!&#39;) 
print(&#39;Howdy!&#39;)
로그인 후 복사

또는

 if spam == 42: 
print(&#39;Hello!&#39;)
로그인 후 복사

for 루프 문에서 len()을 호출하는 것을 잊어버렸습니다("TypeError: '목록' 개체는 정수로 해석될 수 없습니다.") 일반적으로 목록이나 문자열의 요소를 인덱스별로 반복하려고 하는데, 이를 위해서는 range() 함수를 호출해야 합니다. 목록 대신 len 값을 반환하는 것을 기억하세요. 다음 코드에서 오류가 발생합니다.

spam = [&#39;cat&#39;, &#39;dog&#39;, &#39;mouse&#39;] for i in range(spam): 
     print(spam[i])
로그인 후 복사

문자열 값을 수정하려고 합니다("TypeError: 'str' 개체가 항목 할당을 지원하지 않습니다." 발생). string은 다음과 같습니다. an available 다음 코드에서 오류가 발생합니다:

spam = &#39;I have a pet cat.&#39; 
spam[13] = &#39;r&#39; print(spam)
로그인 후 복사

그리고 실제로 이 작업을 수행하려는 경우:

spam = &#39;I have a pet cat.&#39; 
spam = spam[:13] + &#39;r&#39; + spam[14:] print(spam)
로그인 후 복사

비에 연결해 보십시오. - 문자열 값 대 문자열("TypeError: 'int' 객체를 암시적으로 str로 변환할 수 없습니다." 발생) 실제로 수행하려는 경우

numEggs = 12 print(&#39;I have &#39; + numEggs + &#39; eggs.&#39;)
로그인 후 복사

와 같은 코드에서 오류가 발생합니다. 이:

numEggs = 12 print(&#39;I have &#39; + str(numEggs) + &#39; eggs.&#39;)
로그인 후 복사

또는:

 numEggs = 12 print(&#39;I have %s eggs.&#39; % (numEggs))
로그인 후 복사

문자열의 시작과 끝에 따옴표를 추가하는 것을 잊었습니다("SyntaxError: EOL while scanning string literal"이 발생함). 다음 코드:

print(Hello!&#39;) 或者: print(&#39;Hello!)
로그인 후 복사

또는:

myName = &#39;Al&#39; print(&#39;My name is &#39; + myName + . How are you?&#39;)
로그인 후 복사

변수 또는 함수 이름의 철자가 잘못되었습니다("NameError: 이름 'fooba'가 정의되지 않았습니다."). 이 오류는 다음 코드에서 발생합니다. :

foobar = &#39;Al&#39; print(&#39;My name is &#39; + fooba)
로그인 후 복사

또는

spam = ruond(4.2)
로그인 후 복사

또는

spam = Round(4.2)
로그인 후 복사

메서드 이름의 철자가 잘못되었습니다(결과적으로 "AttributeError: 'str' 개체에 'lowerr' 속성이 없습니다.") 이 오류는 다음 코드에서 발생합니다:

spam = &#39;THIS IS IN LOWERCASE.&#39; spam = spam.lowerr()
로그인 후 복사

Exception

문과 표현식 구문이 정확하더라도 실행 중에 오류가 발생할 수 있는데, 이를 예외라고 합니다. 예외가 항상 치명적인 것은 아닙니다. 잠시 후에 예외를 처리하는 방법을 배우게 됩니다. 많은 예외 루틴은 이를 처리하지 않고 대신 오류 메시지를 반환합니다. 예:

>>> 10 * (1/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>ZeroDivisionError: integer division or modulo by zero
>>> 4 + git*3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>NameError: name &#39;git&#39; is not defined
>>> &#39;2&#39; + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>TypeError: cannot concatenate &#39;str&#39; and &#39;int&#39; objects
>>>
로그인 후 복사

错误消息的最后一行就是异常消息,冒号前是异常的类型。上面的 ZeroDivisionError, NameError, TypeError, 都是系统内置的异常。

处理异常

可以自己编写程序来处理异常,比如下面这个例子,它会返回异常,直到用户输入有效数据为止。

>>> while True:
...     try:
...         x = int(raw_input("Please enter a number: "))
...         break...     except ValueError:
...         print "Oops! That was no valid number. Try again..."... 
Please enter a number: x
Oops! That was no valid number. Try again...
Please enter a number: 32x
Oops! That was no valid number. Try again...
Please enter a number: 038
로그인 후 복사

使用 try 和 except ExceptionName 来处理异常

如果没有异常产生,except 段会被跳过

如果某处有异常产生,后面的语句会被跳过,如果产生的异常类型和except后的类型一致,except后的语句会被执行

如果发生异常,但和except后的类型不一致,异常会传递到try语句外面,如果没有相应处理,那么就会打印出像上 一个例子那样的信息。

一个try语句可能有多个except与之对应,分别处理不同类型的异常,最多只有一种处理会被执行。一个except可以包含多 个类型名,比如:

... except (RuntimeError, TypeError, NameError):
...     pass
로그인 후 복사

注意上面的三种异常类型,必须用括号把它们括起来,因为在现代python中, except ValueError, e 的意思是 except ValueError as e:(后面会讲这是什么意思)

最后一个except一般不指定名字,用于处理其余情况

import systry:
    f = open(&#39;myfile.txt&#39;)
    s = f.readline()
    i = int(s.strip())
except IOError as e:    
       print "I/O error({0}): {1}".format(e.errno, e.strerror)
except ValueError:    
       print "Could not convert data to an integer."
except:    
       print "Unexpected error:", sys.exc_info()[0]    
       raise
로그인 후 복사

try..except 语句还可以选择使用else,例如

for arg in sys.argv[1:]:    
     try:
        f = open(arg, &#39;r&#39;)    
   except IOError:        
           print &#39;cannot open&#39;, arg    
   else:        
           print arg, &#39;has&#39;, len(f.readlines()), &#39;lines&#39;
        f.close()
로그인 후 복사

需要注意,一旦使用else,每个except后都要有else,这种方式用于需要指定某一异常不出现时执行什么操作。

except子句可以在异常名后指定参数,这些参数被存储在异常实例产生时的 instance.arg

>>> try:
...     raise Exception(&#39;spam&#39;, &#39;eggs&#39;)
... except Exception as inst:
...     print type(inst)
...     print inst.args
...     print inst
...     x, y = inst.args
...     print &#39;x =&#39;, x
...     print &#39;y =&#39;, y
... 
<type &#39;exceptions.Exception&#39;>
(&#39;spam&#39;, &#39;eggs&#39;)
(&#39;spam&#39;, &#39;eggs&#39;)
x = spam
y = eggs
로그인 후 복사

异常处理不仅仅处理直接在try中出现的异常,还可以处理在try中调用函数的异常

>>> def mdiv():
...     x = 1/0
... 
>>> try:
...     mdiv()
... except ZeroDivisionError as detail:
...      print &#39;Handling run-time error:&#39;, detail
... 
Handling run-time error: integer division or modulo by zero
로그인 후 복사

用户自定义异常

程序可以通过创建一个异常类来命令一个新的异常,这个异常类需要通过直接或者间接的方式由 Exception 类派生。

>>> class MyError(Exception):
...     def __init__(self, value):
...          self.value = value
...     def __str__(self):
...          return repr(self.value)
... 
>>> try:
...     raise MyError(1+5)
... except MyError as e:
...     print &#39;My exception occurred, value:&#39;, e.value
... 
My exception occurred, value: 6
>>> raise MyError(&#39;oops!&#39;)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.MyError: &#39;oops!&#39;
로그인 후 복사

在上面的例子中,__ init __ (), 覆盖了默认的 init 函数,新的行为创建了 value 属性, 替换了原有的 创建args属性的行为。

其它类可以做的事情,通过定义Exception类都可以完成。但是Exception类总是被设计地非常简单, 它们提供一些属性,这样错误处理时就可能方便地提取出这些属性。 当设计一个模块处理多种异常时,常常先定义一个基本的类,其它类在此基础上处理一些特殊情况。

class Error(Exception):    
    """Base class for exceptions in this module."""
    pass
    
class InputError(Error):    
    """Exception raised for errors in the input.    
    Attributes:        
       expr -- input expression in which the error occurred        
       msg  -- explanation of the error    """

    def __init__(self, expr, msg):        
       self.expr = expr        
       self.msg = msg
class TransitionError(Error):    
    """Raised when an operation attempts a state transition that&#39;s not    
       allowed.    
       
       Attributes:        
          prev -- state at beginning of transition        
          next -- attempted new state        
          msg  -- explanation of why the specific transition is not allowed    
       """

    def __init__(self, prev, next, msg):        
        self.prev = prev        
        self.next = next
        self.msg = msg
로그인 후 복사

在定义局部变量前在函数中使用局部变量

(此时有与局部变量同名的全局变量存在)(导致“UnboundLocalError: local variable 'foobar' referenced before assignment”) 在函数中使用局部变来那个而同时又存在同名全局变量时是很复杂的,使用规则是:如果在函数中定义了任何东西,如果它只是在函数中使用那它就是局部的,反之就是全局变量。 这意味着你不能在定义它之前把它当全局变量在函数中使用。 该错误发生在如下代码中:

someVar = 42 def myFunction(): 
   print(someVar) 
   someVar = 100 
   myFunction()
로그인 후 복사

尝试使用 range()创建整数列表

(导致“TypeError: 'range' object does not support item assignment”) 有时你想要得到一个有序的整数列表,所以 range() 看上去是生成此列表的不错方式。然而,你需要记住 range() 返回的是 “range object”,而不是实际的 list 值。 该错误发生在如下代码中:

spam = range(10) 
spam[4] = -1
로그인 후 복사

也许这才是你想做:

spam = list(range(10)) 
spam[4] = -1
로그인 후 복사

(注意:在 Python 2 中 spam = range(10) 是能行的,因为在 Python 2 中 range() 返回的是list值,但是在 Python 3 中就会产生以上错误)

错在 ++ 或者 -- 自增自减操作符。

(导致“SyntaxError: invalid syntax”) 如果你习惯于例如 C++ , Java , PHP 等其他的语言,也许你会想要尝试使用 ++ 或者 -- 自增自减一个变量。在Python中是没有这样的操作符的。 该错误发生在如下代码中:

spam = 1
spam++
로그인 후 복사

也许这才是你想做的:

spam = 1 
spam += 1
로그인 후 복사

忘记为方法的第一个参数添加self参数

(导致“TypeError: myMethod() takes no arguments (1 given)”) 该错误发生在如下代码中:

class Foo(): def myMethod(): 
       print(&#39;Hello!&#39;) a = Foo() a.myMethod()
로그인 후 복사


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Mar 05, 2025 am 09:58 AM

이 튜토리얼은 Python을 사용하여 Zipf의 법칙의 통계 개념을 처리하는 방법을 보여주고 법을 처리 할 때 Python의 읽기 및 대형 텍스트 파일을 정렬하는 효율성을 보여줍니다. ZIPF 분포라는 용어가 무엇을 의미하는지 궁금 할 것입니다. 이 용어를 이해하려면 먼저 Zipf의 법칙을 정의해야합니다. 걱정하지 마세요. 지침을 단순화하려고 노력할 것입니다. Zipf의 법칙 Zipf의 법칙은 단순히 : 큰 자연어 코퍼스에서 가장 자주 발생하는 단어는 두 번째 빈번한 단어, 세 번째 빈번한 단어보다 세 번, 네 번째 빈번한 단어 등 4 배나 자주 발생합니다. 예를 살펴 보겠습니다. 미국 영어로 브라운 코퍼스를 보면 가장 빈번한 단어는 "TH입니다.

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? Mar 10, 2025 pm 06:54 PM

이 기사에서는 HTML을 구문 분석하기 위해 파이썬 라이브러리 인 아름다운 수프를 사용하는 방법을 설명합니다. 데이터 추출, 다양한 HTML 구조 및 오류 처리 및 대안 (SEL과 같은 Find (), find_all (), select () 및 get_text ()와 같은 일반적인 방법을 자세히 설명합니다.

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Mar 10, 2025 pm 06:52 PM

이 기사는 딥 러닝을 위해 텐서 플로와 Pytorch를 비교합니다. 데이터 준비, 모델 구축, 교육, 평가 및 배포와 관련된 단계에 대해 자세히 설명합니다. 프레임 워크, 특히 계산 포도와 관련하여 주요 차이점

파이썬 객체의 직렬화 및 사제화 : 1 부 파이썬 객체의 직렬화 및 사제화 : 1 부 Mar 08, 2025 am 09:39 AM

파이썬 객체의 직렬화 및 사막화는 사소한 프로그램의 주요 측면입니다. 무언가를 Python 파일에 저장하면 구성 파일을 읽거나 HTTP 요청에 응답하는 경우 객체 직렬화 및 사태화를 수행합니다. 어떤 의미에서, 직렬화와 사제화는 세계에서 가장 지루한 것들입니다. 이 모든 형식과 프로토콜에 대해 누가 걱정합니까? 일부 파이썬 객체를 지속하거나 스트리밍하여 나중에 완전히 검색하려고합니다. 이것은 세상을 개념적 차원에서 볼 수있는 좋은 방법입니다. 그러나 실제 수준에서 선택한 직렬화 체계, 형식 또는 프로토콜은 속도, 보안, 유지 보수 상태 및 프로그램의 기타 측면을 결정할 수 있습니다.

파이썬의 수학 모듈 : 통계 파이썬의 수학 모듈 : 통계 Mar 09, 2025 am 11:40 AM

Python의 통계 모듈은 강력한 데이터 통계 분석 기능을 제공하여 생물 통계 및 비즈니스 분석과 같은 데이터의 전반적인 특성을 빠르게 이해할 수 있도록 도와줍니다. 데이터 포인트를 하나씩 보는 대신 평균 또는 분산과 같은 통계를보고 무시할 수있는 원래 데이터에서 트렌드와 기능을 발견하고 대형 데이터 세트를보다 쉽고 효과적으로 비교하십시오. 이 튜토리얼은 평균을 계산하고 데이터 세트의 분산 정도를 측정하는 방법을 설명합니다. 달리 명시되지 않는 한,이 모듈의 모든 함수는 단순히 평균을 합산하는 대신 평균 () 함수의 계산을 지원합니다. 부동 소수점 번호도 사용할 수 있습니다. 무작위로 가져옵니다 수입 통계 Fracti에서

파이썬으로 전문 오류 처리 파이썬으로 전문 오류 처리 Mar 04, 2025 am 10:58 AM

이 튜토리얼에서는 전체 시스템 관점에서 Python의 오류 조건을 처리하는 방법을 배웁니다. 오류 처리는 설계의 중요한 측면이며 최종 사용자까지 가장 낮은 수준 (때로는 하드웨어)에서 교차합니다. y라면

인기있는 파이썬 라이브러리와 그 용도는 무엇입니까? 인기있는 파이썬 라이브러리와 그 용도는 무엇입니까? Mar 21, 2025 pm 06:46 PM

이 기사는 Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask 및 요청과 같은 인기있는 Python 라이브러리에 대해 설명하고 과학 컴퓨팅, 데이터 분석, 시각화, 기계 학습, 웹 개발 및 H에서의 사용에 대해 자세히 설명합니다.

아름다운 수프로 파이썬에서 웹 페이지를 긁어 내기 : 검색 및 DOM 수정 아름다운 수프로 파이썬에서 웹 페이지를 긁어 내기 : 검색 및 DOM 수정 Mar 08, 2025 am 10:36 AM

이 튜토리얼은 간단한 나무 탐색을 넘어서 DOM 조작에 중점을 둔 아름다운 수프에 대한 이전 소개를 바탕으로합니다. HTML 구조를 수정하기위한 효율적인 검색 방법과 기술을 탐색하겠습니다. 일반적인 DOM 검색 방법 중 하나는 EX입니다

See all articles