Python基础入门(错误与异常)

#错误与异常
​
#错误主要是语法上的错误
# prinnt("no") #拼写错误 NameError: name 'prinnt' is not defined
print("yes"); # 多加了分号然而并没有错
# print("no")#中文输入法 IndentationError: unexpected indent
​
#异常是指语法正确的情况下,会在运行期间进行报错
#num = 1/0   这是每一种编程语言讲到异常都会使用这个例子   eroDivisionError: division by zero
​
#b = num+1   num变量没有进行定义   NameError: name 'num' is not defined
​
# '2'+2  TypeError: Can't convert 'int' object to str implicitly
print(int('2')+2)
# 2+'2'   TypeError: unsupported operand type(s) for +: 'int' and 'str'
b = str(2)+'2'
print(b,type(b))
  
yes
4
22 <class 'str'>
In [20]:

"""
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行
#那么出现了异常的时候应该怎么进行处理
​
"""
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行
"""
​
while True:
        try:
            x = int(input("Please enter a number: "))
            break
        except ValueError:
            print("Oops!  That was no valid number.  Try again   ")
Please enter a number: a
Oops!  That was no valid number.  Try again   
Please enter a number: 'a'
Oops!  That was no valid number.  Try again   
Please enter a number: 2
In [22]:

import sys
 
try:
    f = open('myfile.txt')
    s = f.readline()
    i = int(s.strip())
except OSError as err:
    print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except (RuntimeError, TypeError, NameError):
        pass
except:
    print("Unexpected error:", sys.exc_info()[0])
OS error: [Errno 2] No such file or directory: 'myfile.txt'
try except 语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。

Python 使用 raise 语句抛出一个指定的异常。例如:

In [23]:

raise NameError('Koeb')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-23-7fbd1276157a> in <module>()
----> 1 raise NameError('Koeb')

NameError: Koeb

自定义异常

In [25]:

class MyError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)
raise MyError("oh shit")
---------------------------------------------------------------------------
MyError                                   Traceback (most recent call last)
<ipython-input-25-05e8a67aef87> in <module>()
      4         def __str__(self):
      5             return repr(self.value)
----> 6 raise MyError("oh shit")

MyError: 'oh shit'

猜你喜欢

转载自blog.csdn.net/weixin_38452632/article/details/83615335