如何掌握Python异常处理问题
创始人
2024-06-23 11:10:48
0

想要充分的掌握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()每次检索一行数据的方法。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...