如何掌握Python异常处理问题

开发 后端
上回在进行对Python语言进行编制的时候,突然弹出了个对话框,上面写着PythonPython异常处理问题请及时关闭,这个是什么原因啊?

想要充分的掌握Python异常处理这门知识,那么就要对Python语言中的结构、语句、变量、函数、预处理指令、输入和输出等内容进行了解掌握,这样才可以轻轻松松的进行Python异常处理问题地解决。

下面介绍Python异常处理。导入必要的模块之后,animal.py使用connect()调用建立到服务器的连接。为了处理连接故障,比如,显示故障的原因,该脚本必须捕捉异常。在Python语言中,为了处理异常,必须把代码放到try语句中,并且包括一个except子句来包含错误处理代码。生成的连接的代码如下所示:

  1. try:  
  2.  
  3.   conn = MySQLdb.connect (host = "localhost",  
  4.  
  5.   user = "testuser",  
  6.  
  7.   passwd = "testpass",  
  8.  
  9.   db = "test")  
  10.  
  11.   except MySQLdb.Error, e:  
  12.  
  13.   print "Error %d: %s" % (e.args[0], e.args[1])  
  14.  
  15.   sys.exit (1) 

Except子句中的异常类MySQLdb.Error用于取得MySQLdb可以提供的具体数据库错误信息,而变量e则用来存放错误信息。如果出现异常,MySQLdb会把有关信息存入e.args——这是一个包含错误代码和描述该错误的字符串组成的双元素元组。在本例中,except子句会打印这些值,然后退出。

任何数据库有关的语句都可以放入类似的try/except结构中来收集和报告错误,为了简便起见,后面的讨论中不再显示异常处理代码。接下来介绍用于发送语句的方法。Animal.py接下来的代码将创建一个游标对象,并利用它发送设置和填充动物表的语句。这部分代码如下所示:需要注意的是,这里的代码没有包含错误检查。

  1. CREATE TABLE animal  
  2.  
  3.   (  
  4.  
  5.   name CHAR(40),  
  6.  
  7.   category CHAR(40)  
  8.  
  9.   )  本例中的表和一些语句取自于PEAR DB的说明文档。脚本animal.py的开头部分如下所示,从#!行可以看出它是打算运行于UNIX系统的:  
  10.   #!/usr/bin/python  
  11.  
  12.   # animal.py - 创建动物表并从中检索信息  
  13.  
  14.   import sys  
  15.  
  16.   conn = MySQLdb.connect (host = "localhost",  
  17.  
  18.   user = "testuser",  
  19.  
  20.   passwd = "testpass",  
  21.  
  22.   db = "test")  
  23.  
  24.   except MySQLdb.Error, e:  
  25.  
  26.   print "Error %d: %s" % (e.args[0], e.args[1])  
  27.  
  28. sys.exit (1)  Except子句中的异常类MySQLdb.Error用于取得MySQLdb可以提供的具体数据库错误信息,而变量e则用来存放错误信息。
  29. 如果出现异常,MySQLdb会把有关信息存入e.args——这是一个包含错误代码和描述该错误的字符串组成的双元素元组。在本例中,except子句会打印这些值,然后退出。  
  30. 任何数据库有关的语句都可以放入类似的try/except结构中来收集和报告错误,
  31. 为了简便起见,后面的讨论中不再显示异常处理代码。  
  32. 接下来介绍用于发送语句的方法。Animal.py接下来的代码将创建一个游标对象,并利用它发送设置和填充动物表的语句。这部分代码如下所示:  
  33.   cursor = conn.cursor ()  
  34.  
  35.   cursor.execute ("DROP TABLE IF EXISTS animal")  
  36.  
  37.   cursor.execute ("""  
  38.  
  39.   CREATE TABLE animal  
  40.  
  41.   (  
  42.  
  43.   name CHAR(40),  
  44.  
  45.   category CHAR(40)  
  46.  
  47.   )  
  48.  
  49.   """)  
  50.  
  51.   cursor.execute ("""  
  52.  
  53.   INSERT INTO animal (name, category)  
  54.  
  55.   VALUES  
  56.  
  57.   ('snake', 'reptile'),  
  58.  
  59.   ('frog', 'amphibian'),  
  60.  
  61.   ('tuna', 'fish'),  
  62.  
  63.   ('racoon', 'mammal')  
  64.  
  65.   """)  
  66.  
  67.   print "Number of rows inserted: %d" % cursor.rowcount 

请记住,Python异常处理可以放入try语句,这样一旦出错就会触发异常,继而被except子句所捕获并处理。但是考虑到代码的可读性,我们这里只给出了代码的主干部分。上面的语句将完成以下动作:
◆动物表已经存在,则丢弃它。
◆创建动物表。
◆向表中插入一些数据,并报告添加的行数。

这些语句都是通过调用游标对象的execute()方法发出的。其中前两个execute()语句不会生成数据,但是第三个语句将生成一个表示已经插入行数的统计量。这个统计数字存放在游标的rowcount属性中。有些数据库接口是通过execution运行调用的返回值来提供这个统计数字的,但是DB-API却不是这样。

此动物表已经建好,所以我们可以发出选择指令来从中检索信息了。如同前面的语句一样,SELECT语句也要使用execute()方法发出。然而,与DROP或者INSERT语句不同的是,SELECT语句会生成一个结果集合,也就是说,execute()仅仅发出语句,但是却没有返回结果集合。

我们可以使用fetchone()方法每次返回一行数据,或者使用fetchall()方法一次全部搞定。在animal.py中,这两者方法都用到了。下面是如何使用fetchone()每次检索一行数据的方法。

责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-03-01 14:40:00

Python RSS处

2010-01-12 17:26:37

C++编译器

2014-02-19 09:51:29

iOS开发时间处理

2018-09-18 23:32:35

物联网污水处理IOT

2016-11-14 10:06:04

大数据max位图

2010-05-17 14:59:05

MySQL事务处理

2011-04-06 10:27:46

Java异常处理

2009-11-05 12:45:25

WCF异常

2009-02-25 10:34:57

异常处理体系Python

2021-03-10 18:26:49

Tensorflow语音识别音频处理

2022-05-12 23:38:19

SQL数据库字符串

2022-04-24 16:29:28

千年虫时间计算机系统

2023-10-10 13:23:18

空指针异常Java

2019-09-20 08:38:51

Python编程语言Java

2010-01-27 15:29:45

C++异常处理

2023-08-25 08:35:58

Rest方法字符串

2023-12-11 14:19:00

Java程序异常

2011-03-23 16:54:38

数据库联机处理

2019-01-24 16:11:19

前端全局异常数据校验

2023-03-09 12:21:38

点赞
收藏

51CTO技术栈公众号