#什么是异常
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"
#捕获异常
使用try:...except:...来捕获异常,示例如下:

try:
print('-----test--1---')
open('123.txt','r') # 如果123.txt文件不存在,那么会产生 IOError 异常
print('-----test--2---')
print(num)# 如果num变量没有定义,那么会产生 NameError 异常
except (IOError,NameError):
#如果想通过一次except捕获到多个异常可以用一个元组的方式
#异常的传递
如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。
如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样
#抛出自定义异常
你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类
下面是一个引发异常的例子:

class ShortInputException(Exception):
'''自定义的异常类'''
def __init__(self, length, atleast):
#super().__init__()
self.length = length
self.atleast = atleast
def main():
try:
s = input('请输入 --> ')
if len(s) < 3:
# raise引发一个你定义的异常
raise ShortInputException(len(s), 3)
except ShortInputException as result:#x这个变量被绑定到了错误的实例
print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))
else:
print('没有异常发生.')
main()
#在异常处理中重新抛出异常

class Test(object):
def __init__(self, switch):
self.switch = switch #开关
def calc(self, a, b):
try:
return a/b
except Exception as result:
if self.switch:
print("捕获开启,已经捕获到了异常,信息如下:")
print(result)
else:
#重新抛出这个异常,此时就不会被这个异常处理给捕获到,从而触发默认的异常处理
raise

a = Test(True)
a.calc(11,0)

print("----------------------华丽的分割线----------------")

a.switch = False
a.calc(11,0)
#Python中的模块
在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。

形如:

import module1,mudule2...
当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。

在调用math模块中的函数时,必须这样引用:

  模块名.函数名
因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名

import math

#这样会报错
print sqrt(2)

#这样才能正确输出结果
print math.sqrt(2)

有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面方法实现:

from 模块名 import 函数名1,函数名2....
不仅可以引入函数,还可以引入一些全局变量、类等

注意:

通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。

如果想一次性引入math中所有的东西,还可以通过from math import *来实现
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中

语法如下:

from modname import name1[, name2[, ... nameN]]
例如,要导入模块fib的fibonacci函数,使用如下语句:

from fib import fibonacci
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *
#定义自己的模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

比如有这样一个文件test.py,在test.py中定义了函数add

test.py

def add(a,b):
return a+b
#调用自己定义的模块
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入

main.py

import test

result = test.add(11,22)
print(result)

在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发人员会自行在py文件中添加一些测试信息,
至此,可发现test.py中的测试代码,应该是单独执行test.py文件时才应该执行的,不应该是其他的文件中引用而执行

为了解决这个问题,python在执行一个文件时有个变量`__name__`
可以根据`__name__`变量的结果能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行测试代码
#`__all__`变量
如果一个文件中有`__all__`变量,那么也就意味着这个变量中的元素,不会被from xxx import *时导入
#包
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为`__init__`.py 文件,那么这个文件夹就称之为包
有效避免模块名称冲突问题,让应用组织结构更加清晰
`__init__`.py文件有什么用
`__init__`.py 控制着包的导入行为
`__init__`.py为空
仅仅是把这个包导入,不会导入包中的模块
`__all__`
在`__init__`.py文件中,定义一个`__all__`变量,它控制着 from 包名 import *时导入的模块
可以在`__init__`.py文件中编写内容
可以在这个文件中编写语句,当导入时,这些语句就会被执行

转载于:https://www.cnblogs.com/guducp/p/9097708.html

python 异常 模块 包相关推荐

  1. Python导入模块(包)的两种方式 TypeError: 'module' object is not callable

    Python编程时明明在开始处import了相关包,但是调用函数时就报错如下: TypeError: 'module' object is not callable Python中有两种导入包(模块, ...

  2. Python module模块 包 __name__

    模块:一个.py文件就称为一个模块(module) module的好处: •提高代码的可维护性,一个module编写完成,就可以被其它地方引用,不必重复编写,注意模块名应避免与python内置库重名 ...

  3. python异常模块raise的概念以及基本用法

    当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行.        raise():  用raise语句来引发一个 ...

  4. python traceback 丢失_Python异常模块traceback用法实例分析

    本文实例讲述了python异常模块traceback用法.分享给大家供大家参考,具体如下: traceback模块被用来跟踪异常返回信息. 如下例所示: import traceback try: r ...

  5. Python 模块/包的导入以及 import 的用法总结

    Python 模块/包的导入以及 import 的用法总结 一.模块/包 1. 前言 一个以 .py 为后缀的 Python 文件就是一个模块. 包是一个文件夹或一个目录. 每个包都有一个全局定义的配 ...

  6. python 必备模块和包_Python_异常和模块

    异常处理 单个异常处理: try: print(num) except NameError: print('没有定义变量') except FileNotFoundError: print('找不到文 ...

  7. python打开文件报错无效序列_黑马python入门(4):python基础(序列,异常,操作文件,模块包,日志调试信息)

    序列 str声明:test_str="abcedf" 也可以保留字符串里面的格式来 test_str=""" \r\n测试标题 hello world ...

  8. python的模块、包、库区别。导入包/模块的方式

    直接进入主题,如果觉得文章可以,记得点点赞和关注,我主要会写一些在学习过程中遇到的困难 模块 为了使代码更容易维护,提高代码重用价值:可以将一组相关功能的代码写入一个单独的.py文件中:使别人导入使用 ...

  9. python中模块文件的扩展名不一定是py_python模块和python包有什么区别?

    python模块和python包有什么区别? 另请参见:"package"和"module"(其他语言)之间的区别是什么? 我可能错了,但对我来说:模块基本上是 ...

最新文章

  1. linux进程操作命令,linux常用进程命令
  2. iOS12系统应用开发基础教程发送邮件
  3. 激发新型城市创新动能 第四范式分享智慧城市探索之路
  4. 使用 cProfile 和火焰图调优 Python 程序性能
  5. JAVA编译器eclipse的安装教程
  6. 文档下载道客巴巴豆丁网原创力文档代下载Word PPT文件下载
  7. [HYSYS学习]逻辑单元-循环器
  8. AQS框架之南风北巷
  9. Mysql 超键 候选键 主键 外键之间关系
  10. 宇言(四):关于时间循环
  11. 红米note3android驱动,红米Note3手机驱动
  12. 2.19 serenity
  13. mt4的服务器在哪个文件,mt4的服务器地址
  14. poi2011 切题记
  15. “潮经济”的品牌营销和消费模式具有哪些特点?
  16. go time包定时器和断续器
  17. 单人登录-踢下线功能实现
  18. LeetCode解题源代码链接集锦一
  19. 智能家居“伪智能”陷阱此起彼伏 该如何辨别?
  20. 平面上N个点,求斜率最大的那条直线通过的两点

热门文章

  1. java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl解决办法
  2. Node.js 安装指南
  3. Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
  4. Python eval 函数妙用
  5. PHP 中获取文件名及路径
  6. HDOJ 4302 Holedox Eating (multiset || 线段树)
  7. 低姿态生活,高境界做人
  8. jq判断html为空,jquery如何判断是否为null?
  9. 返回封装结果集Result
  10. 人到了中年在职场中就应该保持内敛的心态