Python 오류, 예외 및 프로그램 디버깅 방법 소개(코드 포함)

不言
풀어 주다: 2019-04-11 11:59:14
앞으로
3483명이 탐색했습니다.

이 기사는 Python 오류, 예외 및 프로그램 디버깅 방법(코드 포함)을 소개합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

예외는 실행 중에 Python 프로그램으로 인해 발생하는 오류입니다. 프로그램에서 처리되지 않은 예외가 발생하면 프로그램에 예외 처리를 추가해야만 프로그램이 종료됩니다. 건장한".

Python에는 예외 처리를 위한 고유한 문법 형식이 있습니다. Python에서 예외 처리 및 프로그램 디버깅 방법을 익히세요. 주요 내용은 다음과 같습니다.

  • List Item#🎜 🎜#
  • 목록 항목
  • 구문 오류
  • 예외 개념
  • try 문을 사용하여 예외를 포착합니다. 🎜🎜#일반적인 예외 처리
  • 사용자 정의된 예외
  • PDB를 사용하여 Python 프로그램을 디버깅합니다.
  • 7.1 문법 오류

1. 철자 오류

는 Python 언어의 키워드 철자 오류, 변수 이름, 함수 이름 등의 철자 오류입니다.

키워드 철자가 틀리면

팁이 표시됩니다.

SyntaxError(语法错误),而变量名、函数名拼写错误会在运行时给出NameError的错误2. 스크립트 프로그램이 Python 구문 사양을 준수하지 않습니다

예를 들어 대괄호, 콜론 및 기타 기호가 누락되고 작성 시 표현식 오류가 있습니다.

3. 들여쓰기 오류

Python 구문에서는 들여쓰기가 프로그램의 구문 중 하나이며 Python 언어의 고유한 측면이어야 한다고 규정하기 때문입니다. 일반적으로 Python의 표준 들여쓰기는 4개의 공백입니다. 물론 각자의 습관에 맞게 Tab을 사용해도 됩니다. 그러나 동일한 프로그램이나 프로젝트에서는 동일한 들여쓰기 스타일을 일관되게 사용해야 합니다.

7.2 예외 처리

예외는 실행 중에 Python 프로그램으로 인해 발생하는 오류입니다. 프로그램에서 처리되지 않은 예외가 발생하면 해당 예외로 인해 스크립트가 종료됩니다. 프로그램에서 이러한 예외를 포착하고 관련 처리를 수행해야만 프로그램이 중단되지 않을 수 있습니다.

7.2.1 예외 처리를 위한 기본 구문

try 문은 Python의 다른 문과 마찬가지로 Python의 다른 문과 마찬가지로 들여쓰기 구조를 사용합니다. try 문에는 선택적인 else 블록도 있습니다. 일반적인 try 문의 기본 형태는 다음과 같습니다.
try:
     <语句(块)>            #可能产生异常的语句(块)
  except <异常名1>:          #要处理的异常
     <语句(块)>            #异常处理语句
  except <异常名2>:          #要处理的异常
     <语句(块)>            #异常处理语句
  else:
     <语句(块)>            #未触发异常,则执行该语句(块)
  finally:
     <语句(块)>            #始终执行该语,一般为了达到释放资源等目的
  
로그인 후 복사

실제 응용 프로그램에서는 일부 명령문을 프로그램의 필요에 따라 사용할 수 있습니다. 일반적인 형식은 다음과 같습니다.

양식 1: # 🎜🎜 #

try:
     <语句(块)>
  except <异常名1>:
     <语句(块)>
  
로그인 후 복사

예:

def testTry (index, flag=False):
     stulst = ["John","Jenny","Tom"]
     if flag:                         #flag为True时,捕获异常
        try:
           astu = stulst [index]
        except IndexError:
           print("IndexError")
        return "Try Test Finished!"
     else:                            #flag为False时,不捕获异常
        astu =stulst [index]
        return "No Try Test Finished!"
  print("Right params testing start...")
  print (testTry (1, True))           #不越界参数,捕获异常(正常)
  print (testTry (1, False))          #不越界参数,不捕获异常(正常)
  print("Error params testing start...")
  print (testTry (4, True))           #越界参数,捕获异常(正常)
  print (testTry (4, False))          #越界参数,不捕获异常(程序运行会中断)
  
로그인 후 복사

양식 2:  

 try:
        <语句(块)>
     except < 异常名1>:
        <语句(块)>
     finally:
        <语句(块)>
 
로그인 후 복사
# 🎜🎜 ## 🎜🎜#예:

def testTryFinally (index):
     stulst = ["John","Jenny", "Tom"]
     af = open ("my.txt", 'wt+')
     try:
        af.write(stulst[index])
     except:
        pass
     finally:
        af.close()               #无论是否产生越界异常,都关闭文件
        print("File already had been closed!")
  print('No IndexError...')
  testTryFinally (1)             #无越界异常,正常关闭文件
  print('IndexError...')
  testTryFinally (4)             #有越界异常,正常关闭文件
로그인 후 복사
7.2.2 Python의 주요 내장 예외 및 해당 처리

Python의 일반적인 예외는 미리 정의되어 있습니다. 대화형 환경에서 dir(__buildins__) 명령을 사용하면 사전 정의된 모든 예외가 표시됩니다. ### ## ## ## ## #####예외 이름######설명### ## ## ## ## 🎜🎜# #AttributeError

존재하지 않는 메서드를 호출하여 발생한 예외

EOFError파일이 발생했습니다. 마지막에 예외 발생가져오기 모듈 오류로 인해 발생한 예외#🎜 🎜 #IndexError범위를 벗어난 목록으로 인해 발생한 예외IOErrorI/O 작업으로 인해 발생한 예외 , 파일 열기 오류 등KeyError사전에 없는 키워드를 사용하여 발생한 예외#🎜🎜 #NameError존재하지 않는 변수 이름을 사용하여 발생한 예외TabError# 🎜🎜#잘못된 들여쓰기로 인해 발생한 문 블록 예외에 존재하지 않는 값으로 인해 발생한 예외 검색 목록0으로 나누면 발생하는 예외
ImportError
#🎜🎜 #
ValueError
ZeropisionError

except语句主要有以下几种用法

except:                              #捕获所有异常;
except <异常名>:                      #捕获指定异常;
except (异常名1,异常名2):            #捕获异常名1或者异常名2;
except <异常名> as <数据>:            #捕获指定异常及其附加的数据;
except(异常名1,异常名2)as <数据>:  #捕获异常名1或者异常名2及异常的附加数据。
로그인 후 복사

7.3 手工抛出异常

为了程序的需要,程序员还可以自定义新的异常类型,例如对用户输入文本的长度有要求,则可以使用raise引发异常,以确保文本输入的长度符合要求。

7.3.1 用raise手工抛出异常

使用raise引发异常十分简单,raise有以下几种使用方式。

  raise 异常名
  raise 异常名,附加数据
  raise 类名
使用raise可以抛出各种预定的异常,即使程序在运行时根本不会引发该异常。

def testRaise2():
        for i in range (5):
             try:
                if i==2:    #i==2抛出NameError异常
                  raise NameError
             except NameError:
                print('Raise a NameError!')
             print (i)
        print('end...')

testRaise2 ()
로그인 후 복사

运行结果:

0
1
Raise a NameError!
2
3
4
end...
로그인 후 복사

7.3.2 assert语句

assert语句的一般形式如下。

assert <条件测试>, <异常附加数据>           #其中异常附加数据是可选的
로그인 후 복사

assert语句是简化的raise语句,它引发异常的前提是其后面的条件测试为假。

举例:

def testAssert():
     for i in range (3):
        try:
           assert i<2
        except AssertionError:
           print('Raise a AssertionError!')
        print (i)
     print('end...')

  testAssert()
로그인 후 복사

运行结果:

0
1
Raise a AssertionError!
2
end...
로그인 후 복사

assert语句一般用于在程序开发时测试代码的有效性。比如某个变量的值必须在一定范围内,而运行时得到的值不符合要求,则引发该异常,对开发者予以提示。所以一般在程序开发中,不去捕获这个异常,而是让它中断程序。原因是程序中已经出现了问题,不应继续运行。

assert语句并不是总是运行的,只有Python内置的一个特殊变量__debug__为True时才运行。要关闭程序中的assert语句就使用python-O(短画线,后接大写字母O)来运行程序。

7.3.3 自定义异常类

在Python中定义异常类不用从基础完全自己定义,只要通过继承Exception类来创建自己的异常类。异常类的定义和其他类没有区别,最简单的自定义异常类甚至可以只继承Exception类,类体为pass如:

class MyError (Exception):          #继承Exception类
     pass
로그인 후 복사

如果需要异常类带有一定的提示信息,也可以重载__init__和__str__这两个方法。【相关推荐:python视频教程

위 내용은 Python 오류, 예외 및 프로그램 디버깅 방법 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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