一、包

1,什么是包?

把解决一类问题的模块放在同一个文件夹里-----包

2,包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

  1. 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法

  2. 包是目录级的(文件夹级),文件夹是用来组成py文件(包的本质就是一个包含__init__.py文件的目录)

  3. import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件

3,强调:

  1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错

  2. 创建包的目的不是为了运行,而是被导入使用,包只是模块的一种形式而已,包即模块

 4,注意事项

  1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

  2.对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。

  3.对比import item 和from item import name的应用场景:
  如果我们想直接使用name那必须使用后者。

  1. glance/ #Top-level package
  2.  
  3. ├── __init__.py #Initialize the glance package
  4.  
  5. ├── api #Subpackage for api
  6.  
  7. ├── __init__.py
  8.  
  9. ├── policy.py
  10.  
  11. └── versions.py
  12.  
  13. ├── cmd #Subpackage for cmd
  14.  
  15. ├── __init__.py
  16.  
  17. └── manage.py
  18.  
  19. └── db #Subpackage for db
  20.  
  21. ├── __init__.py
  22.  
  23. └── models.py
  24.  
  25. 目录结构

目录结构

5,import

我们在与包glance同级别的文件中测试

  1. 1 import glance.db.models
  2. 2 glance.db.models.register_models('mysql')

6,from ... import ...

需要注意的是from后import导入的模块,必须是明确的一个不能带点,否则会有语法错误,如:from a import b.c是错误语法

我们在与包glance同级别的文件中测试 :

  1. from glance.db import models
  2. models.register_models('mysql')
  3. from glance.db.models import register_models
  4. register_models('mysql')

7,__init__.py文件

不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的__init__.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

8,绝对导入和相对导入

最顶级包glance是写给别人用的,然后在glance包内部也会有彼此之间互相导入的需求,这时候就有绝对导入和相对导入两种方式:

绝对导入:以glance作为起始

相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)

例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py

  1. glance/api/version.py
  2.  
  3. #绝对导入
  4. from glance.cmd import manage
  5. manage.main()
  6.  
  7. #相对导入
  8. from ..cmd import manage
  9. manage.main()

特别需要注意的是:可以用import导入内置或者第三方模块(已经在sys.path中),但是要绝对避免使用import来导入自定义包的子模块(没有在sys.path中),应该使用from... import ...的绝对或者相对导入,且包的相对导入只能用from的形式。

  1. from glance.api import versions
  2.  
  3. '''
  4. 执行结果:
  5. ImportError: No module named 'policy'
  6. '''
  7.  
  8. '''
  9. 分析:
  10. 此时我们导入versions在versions.py中执行
  11. import policy需要找从sys.path也就是从当前目录找policy.py,
  12. 这必然是找不到的
  13. '''
  1. glance/
  2.  
  3. ├── __init__.py from glance import api
  4. from glance import cmd
  5. from glance import db
  6.  
  7. ├── api
  8.  
  9. ├── __init__.py from glance.api import policy
  10. from glance.api import versions
  11.  
  12. ├── policy.py
  13.  
  14. └── versions.py
  15.  
  16. ├── cmd from glance.cmd import manage
  17.  
  18. ├── __init__.py
  19.  
  20. └── manage.py
  21.  
  22. └── db from glance.db import models
  23.  
  24. ├── __init__.py
  25.  
  26. └── models.py
  27.  
  28. 绝对导入

绝对导入

  1. glance/
  2.  
  3. ├── __init__.py from . import api #.表示当前目录
  4. from . import cmd
  5. from . import db
  6.  
  7. ├── api
  8.  
  9. ├── __init__.py from . import policy
  10. from . import versions
  11.  
  12. ├── policy.py
  13.  
  14. └── versions.py
  15.  
  16. ├── cmd from . import manage
  17.  
  18. ├── __init__.py
  19.  
  20. └── manage.py from ..api import policy
  21. #..表示上一级目录,想再manage中使用policy中的方法就需要回到上一级glance目录往下找api包,从api导入policy
  22.  
  23. └── db from . import models
  24.  
  25. ├── __init__.py
  26.  
  27. └── models.py
  28.  
  29. 相对导入

相对导入

9,单独导入包

  1. 1 #glance/__init__.py
  2. 2 from . import cmd
  3. 3
  4. 4 #glance/cmd/__init__.py
  5. 5 from . import manage

10,软件开发规范

  1. #=============>bin目录:存放执行脚本
  2. #start.py
  3. import sys,os
  4.  
  5. BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  6. sys.path.append(BASE_DIR)
  7.  
  8. from core import core
  9. from conf import my_log_settings
  10.  
  11. if __name__ == '__main__':
  12. my_log_settings.load_my_logging_cfg()
  13. core.run()
  14.  
  15. #=============>conf目录:存放配置文件
  16. #config.ini
  17. [DEFAULT]
  18. user_timeout = 1000
  19.  
  20. [egon]
  21. password = 123
  22. money = 10000000
  23.  
  24. [alex]
  25. password = alex3714
  26. money=10000000000
  27.  
  28. [yuanhao]
  29. password = ysb123
  30. money=10
  31.  
  32. #settings.py
  33. import os
  34. config_path=r'%s\%s' %(os.path.dirname(os.path.abspath(__file__)),'config.ini')
  35. user_timeout=10
  36. user_db_path=r'%s\%s' %(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),\
  37. 'db')
  38.  
  39. #my_log_settings.py
  40. """
  41. logging配置
  42. """
  43.  
  44. import os
  45. import logging.config
  46.  
  47. # 定义三种日志输出格式 开始
  48.  
  49. standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
  50. '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
  51.  
  52. simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
  53.  
  54. id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
  55.  
  56. # 定义日志输出格式 结束
  57.  
  58. logfile_dir = r'%s\log' %os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # log文件的目录
  59.  
  60. logfile_name = 'all2.log' # log文件名
  61.  
  62. # 如果不存在定义的日志目录就创建一个
  63. if not os.path.isdir(logfile_dir):
  64. os.mkdir(logfile_dir)
  65.  
  66. # log文件的全路径
  67. logfile_path = os.path.join(logfile_dir, logfile_name)
  68.  
  69. # log配置字典
  70. LOGGING_DIC = {
  71. 'version': 1,
  72. 'disable_existing_loggers': False,
  73. 'formatters': {
  74. 'standard': {
  75. 'format': standard_format
  76. },
  77. 'simple': {
  78. 'format': simple_format
  79. },
  80. },
  81. 'filters': {},
  82. 'handlers': {
  83. #打印到终端的日志
  84. 'console': {
  85. 'level': 'DEBUG',
  86. 'class': 'logging.StreamHandler', # 打印到屏幕
  87. 'formatter': 'simple'
  88. },
  89. #打印到文件的日志,收集info及以上的日志
  90. 'default': {
  91. 'level': 'DEBUG',
  92. 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
  93. 'formatter': 'standard',
  94. 'filename': logfile_path, # 日志文件
  95. 'maxBytes': 1024*1024*5, # 日志大小 5M
  96. 'backupCount': 5,
  97. 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
  98. },
  99. },
  100. 'loggers': {
  101. #logging.getLogger(__name__)拿到的logger配置
  102. '': {
  103. 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
  104. 'level': 'DEBUG',
  105. 'propagate': True, # 向上(更高level的logger)传递
  106. },
  107. },
  108. }
  109.  
  110. def load_my_logging_cfg():
  111. logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
  112. logger = logging.getLogger(__name__) # 生成一个log实例
  113. logger.info('It works!') # 记录该文件的运行状态
  114.  
  115. if __name__ == '__main__':
  116. load_my_logging_cfg()
  117.  
  118. #=============>core目录:存放核心逻辑
  119. #core.py
  120. import logging
  121. import time
  122. from conf import settings
  123. from lib import read_ini
  124.  
  125. config=read_ini.read(settings.config_path)
  126. logger=logging.getLogger(__name__)
  127.  
  128. current_user={'user':None,'login_time':None,'timeout':int(settings.user_timeout)}
  129. def auth(func):
  130. def wrapper(*args,**kwargs):
  131. if current_user['user']:
  132. interval=time.time()-current_user['login_time']
  133. if interval < current_user['timeout']:
  134. return func(*args,**kwargs)
  135. name = input('name>>: ')
  136. password = input('password>>: ')
  137. if config.has_section(name):
  138. if password == config.get(name,'password'):
  139. logger.info('登录成功')
  140. current_user['user']=name
  141. current_user['login_time']=time.time()
  142. return func(*args,**kwargs)
  143. else:
  144. logger.error('用户名不存在')
  145.  
  146. return wrapper
  147.  
  148. @auth
  149. def buy():
  150. print('buy...')
  151.  
  152. @auth
  153. def run():
  154.  
  155. print('''
  156. 购物
  157. 查看余额
  158. 转账
  159. ''')
  160. while True:
  161. choice = input('>>: ').strip()
  162. if not choice:continue
  163. if choice == '':
  164. buy()
  165.  
  166. if __name__ == '__main__':
  167. run()
  168.  
  169. #=============>db目录:存放数据库文件
  170. #alex_json
  171. #egon_json
  172.  
  173. #=============>lib目录:存放自定义的模块与包
  174. #read_ini.py
  175. import configparser
  176. def read(config_file):
  177. config=configparser.ConfigParser()
  178. config.read(config_file)
  179. return config
  180.  
  181. #=============>log目录:存放日志
  182. #all2.log
  183. [2017-07-29 00:31:40,272][MainThread:11692][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  184. [2017-07-29 00:31:41,789][MainThread:11692][task_id:core.core][core.py:25][ERROR][用户名不存在]
  185. [2017-07-29 00:31:46,394][MainThread:12348][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  186. [2017-07-29 00:31:47,629][MainThread:12348][task_id:core.core][core.py:25][ERROR][用户名不存在]
  187. [2017-07-29 00:31:57,912][MainThread:10528][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  188. [2017-07-29 00:32:03,340][MainThread:12744][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  189. [2017-07-29 00:32:05,065][MainThread:12916][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  190. [2017-07-29 00:32:08,181][MainThread:12916][task_id:core.core][core.py:25][ERROR][用户名不存在]
  191. [2017-07-29 00:32:13,638][MainThread:7220][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  192. [2017-07-29 00:32:23,005][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]
  193. [2017-07-29 00:32:40,941][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]
  194. [2017-07-29 00:32:47,222][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]
  195. [2017-07-29 00:32:51,949][MainThread:7220][task_id:core.core][core.py:25][ERROR][用户名不存在]
  196. [2017-07-29 00:33:00,213][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]
  197. [2017-07-29 00:33:50,118][MainThread:8500][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]
  198. [2017-07-29 00:33:55,845][MainThread:8500][task_id:core.core][core.py:20][INFO][登录成功]
  199. [2017-07-29 00:34:06,837][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]
  200. [2017-07-29 00:34:09,405][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]
  201. [2017-07-29 00:34:10,645][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]

二、异常处理

1,程序中难免出现错误,而错误分成两种:

  1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正)

  1. #语法错误示范一
  2. if
  3.  
  4. #语法错误示范二
  5. def test:
  6. pass
  7.  
  8. #语法错误示范三
  9. print(haha
  10.  
  11. 语法错误

语法错误

  2.逻辑错误(逻辑错误)

  1. #用户输入不完整(比如输入为空)或者输入非法(输入不是数字)
  2. num=input(">>: ")
  3. int(num)
  4.  
  5. #无法完成计算
  6. res1=1/0
  7. res2=1+'str'

逻辑错误

2,什么是异常

异常就是程序运行时发生错误的信号

  

3,python中的异常种类

 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

  

  1. l=['egon','aa']
  2. l[3]

Index Error

  1. dic={'name':'egon'}
  2. dic['age']

Key Error

  1. s='hello'
  2. int(s)

Value Error

4,常用异常

  1. AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  2. IOError 输入/输出异常;基本上是无法打开文件
  3. ImportError 无法引入模块或包;基本上是路径问题或名称错误
  4. IndentationError 语法错误(的子类) ;代码没有正确对齐
  5. IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  6. KeyError 试图访问字典里不存在的键
  7. KeyboardInterrupt Ctrl+C被按下
  8. NameError 使用一个还未被赋予对象的变量
  9. SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  10. TypeError 传入对象类型与要求的不符合
  11. UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
  12. 导致你以为正在访问它
  13. ValueError 传入一个调用者不期望的值,即使值的类型是正确的
  14.  
  15. 常用异常

常用异常

5,更多异常

  1. ArithmeticError
  2. AssertionError
  3. AttributeError
  4. BaseException
  5. BufferError
  6. BytesWarning
  7. DeprecationWarning
  8. EnvironmentError
  9. EOFError
  10. Exception
  11. FloatingPointError
  12. FutureWarning
  13. GeneratorExit
  14. ImportError
  15. ImportWarning
  16. IndentationError
  17. IndexError
  18. IOError
  19. KeyboardInterrupt
  20. KeyError
  21. LookupError
  22. MemoryError
  23. NameError
  24. NotImplementedError
  25. OSError
  26. OverflowError
  27. PendingDeprecationWarning
  28. ReferenceError
  29. RuntimeError
  30. RuntimeWarning
  31. StandardError
  32. StopIteration
  33. SyntaxError
  34. SyntaxWarning
  35. SystemError
  36. SystemExit
  37. TabError
  38. TypeError
  39. UnboundLocalError
  40. UnicodeDecodeError
  41. UnicodeEncodeError
  42. UnicodeError
  43. UnicodeTranslateError
  44. UnicodeWarning
  45. UserWarning
  46. ValueError
  47. Warning
  48. ZeroDivisionError
  49.  
  50. 更多异常

更多异常

三、异常处理

1,什么是异常?

异常发生之后

异常之后的代码就不执行了

2,什么是异常处理

python解释器检测到错误,触发异常(也允许程序员自己触发异常)

程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关)

如果捕捉成功则进入另外一个处理分支,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理

3,如何进行异常处理?

首先须知,异常是由程序的错误引起的,语法上的错误跟异常处理无关,必须在程序运行前就修正

一: 使用if判断式

正常的计划:

  1. num1=input('>>: ') #输入一个字符串试试
  2. int(num1)
  1. #_*_coding:utf-8_*_
  2. __author__ = 'Linhaifeng'
  3.  
  4. num1=input('>>: ') #输入一个字符串试试
  5. if num1.isdigit():
  6. int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
  7. elif num1.isspace():
  8. print('输入的是空格,就执行我这里的逻辑')
  9. elif len(num1) == 0:
  10. print('输入的是空,就执行我这里的逻辑')
  11. else:
  12. print('其他情情况,执行我这里的逻辑')
  13.  
  14. '''
  15. 问题一:
  16. 使用if的方式我们只为第一段代码加上了异常处理,但这些if,跟你的代码逻辑并无关系,这样你的代码会因为可读性差而不容易被看懂
  17.  
  18. 问题二:
  19. 这只是我们代码中的一个小逻辑,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。
  20. '''
  21.  
  22. 使用if判断进行异常处理

使用if判断进行异常处理

总结:

1.if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。

2.在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

3.if是可以解决异常的,只是存在1,2的问题,所以,千万不要妄下定论if不能用来异常处理。

二:python为每一种异常定制了一个类型,然后提供了一种特定的语法结构用来进行异常处理

part1:基本语法

  1. try:
  2. 被检测的代码块
  3. except 异常类型:
  4. try中一旦检测到异常,就执行这个位置的逻辑
  1. f = open('a.txt')
  2.  
  3. g = (line.strip() for line in f)
  4. for line in g:
  5. print(line)
  6. else:
  7. f.close()

读文件例1

  1. #读文件例2
    try:
  2. f = open('a.txt')
  3. g = (line.strip() for line in f)
  4. print(next(g))
  5. print(next(g))
  6. print(next(g))
  7. print(next(g))
  8. print(next(g))
  9. except StopIteration:
  10. f.close()
  11.  
  12. '''
  13. next(g)会触发迭代f,依次next(g)就可以读取文件的一行行内容,无论文件a.txt有多大,同一时刻内存中只有一行内容。
  14. 提示:g是基于文件句柄f而存在的,因而只能在next(g)抛出异常StopIteration后才可以执行f.close()
  15. '''

part2:异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。

  1. # 未捕获到异常,程序直接报错
  2.  
  3. s1 = 'hello'
  4. try:
  5. int(s1)
  6. except IndexError as e:
  7. print e

part3:多分支

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except IndexError as e:
  5. print(e)
  6. except KeyError as e:
  7. print(e)
  8. except ValueError as e:
  9. print(e)

part4:万能异常 在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except Exception as e:
  5. print(e)

为什么不直接用万能异常?分两种情况去看:

1.如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except Exception,e:
  5. '丢弃或者执行其他逻辑'
  6. print(e)
  7.  
  8. #如果你统一用Exception,没错,是可以捕捉所有异常,但意味着你在处理所有异常时都使用同一个逻辑去处理(这里说的逻辑即当前expect下面跟的代码块)
  9.  
  10. Exception

2.如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。

  1. #多分支
  2. s1 = 'hello'
  3. try:
  4. int(s1)
  5. except IndexError as e:
  6. print(e)
  7. except KeyError as e:
  8. print(e)
  9. except ValueError as e:
  10. print(e)
  1. #多分支+Exception
  2. s1 = 'hello'
  3. try:
  4. int(s1)
  5. except IndexError as e:
  6. print(e)
  7. except KeyError as e:
  8. print(e)
  9. except ValueError as e:
  10. print(e)
  11. except Exception as e:
  12. print(e)

part5:异常的其他机构

  1. s1 = 'hello'
  2. try:
  3. int(s1)
  4. except IndexError as e:
  5. print(e)
  6. except KeyError as e:
  7. print(e)
  8. except ValueError as e:
  9. print(e)
  10. #except Exception as e:
  11. # print(e)
  12. else:
  13. print('try内代码块没有异常则执行我')
  14. finally:
  15. print('无论异常与否,都会执行该模块,通常是进行清理工作')

part6:主动触发异常

  1. try:
  2. raise TypeError('类型错误')
  3. except Exception as e:
  4. print(e)

part7:自定义异常

  1. class EvaException(BaseException):
  2. def __init__(self,msg):
  3. self.msg=msg
  4. def __str__(self):
  5. return self.msg
  6.  
  7. try:
  8. raise EvaException('类型错误')
  9. except EvaException as e:
  10. print(e)

part8:try..except的方式比较if的方式的好处

try..except这种异常处理机制就是取代if那种方式,让你的程序在不牺牲可读性的前提下增强健壮性和容错性

异常处理中为每一个异常定制了异常类型(python中统一了类与类型,类型即类),对于同一种异常,一个except就可以捕捉到,可以同时处理多段代码的异常(无需‘写多个if判断式’)减少了代码,增强了可读性

使用try..except的方式

1:把错误处理和真正的工作分开来
2:代码更易组织,更清晰,复杂的工作任务更容易实现;
3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

python:包与异常处理的更多相关文章

  1. Python 基础之 异常处理

    python 基础之异常处理 说到异常处理,就得先问一下,什么是异常处理?  先来看一下,什么是异常? 异常就是:程序运行时发出的错误的信号. 异常的种类先来看一下: 一.常见的异常 Attribut ...

  2. python中的异常处理机制

    python中的异常处理 1.什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异 ...

  3. Python 入门 之 异常处理

    Python 入门 之 异常处理 1.异常处理 (1)程序中的错误分为两种 <1> 语法错误 (这种错误,根本过不了Python解释器的语法检测,必须在程序执行前就改正) # 语法错误示范 ...

  4. python面向对象07/异常处理

    python面向对象07/异常处理 目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 ...

  5. 离线pip下载Python包

    离线pip下载Python包   这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧.      # 生产环境  windows xp# python 2 ...

  6. 【转】linux和windows下安装python集成开发环境及其python包

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  7. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

  8. centos 7 下安装numpy、scipy等python包

    本文适用于刚入门的小白,欢迎大牛们批评指正. 因为要开始数据分析,而python又不像R和matlab那么简洁.需要安装的包很多~ 网上找了好多牛人博客,想在centos7下安装numpy,scipy ...

  9. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

随机推荐

  1. PIE SDK自定义滤波

    1.算法功能简介 自定义滤波可以自由设置滤波模板,对数据进行处理,自定义滤波器的一般规则要求: ( 1) 滤波器的大小应该是奇数,这样它才有一个中心,例如 3x3, 5x5 或者 7x7.有中心了,也 ...

  2. $bzoj1052-HAOI2007$ 覆盖问题 抽屉原理 二分答案

    题面描述 某人在山上种了\(N\leq 2*10^4​\)棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定用\(3​\) ...

  3. DB Intro - MongoDB User

    MongoDB 3.0 用户创建   摘要: MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法. 环境.测试: 在安装Mo ...

  4. Linux下Tomcat如何传入'$'符号

    在实际的工作中,有同事有需求要在Tomcat的启动脚本中添加启动参数,而且启动参数中带有特殊的字符'$',在实际的应用程序中,使用System.getProperty()进行获取设置的值,但是这个字符 ...

  5. C#知识点提要

    本篇博文主要对asp.net mvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C# 3.0才有的一些C#语言特性.对于正在学asp.net mvc的童鞋,不防花个几分钟浏览一下.本文要回顾的C# ...

  6. vue中promise的使用

    vue中promise的使用 promise是处理异步的利器,在之前的文章<ES6之promise>中,我详细介绍了promise的使用, 在文章<js动画实现&&回 ...

  7. php获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法

    php 获取今日.昨日.上周.本月的起始时间戳和结束时间戳的方法,主要使用到了 php 的时间函数 mktime.下面首先还是直奔主题以示例说明如何使用 mktime 获取今日.昨日.上周.本月的起始 ...

  8. NSTimer_Block封装定时器的target-action成Block回调

    前言 定时器NSTimer虽然简单易用,但是目标响应机制(target-action)这种方式很容易在代码中出现代码臃肿的情况,特别是在一个文件中有大量的代码,多个定时器的时候不方便调试,因此将NST ...

  9. tomcat8.5.8遇到的两个问题

    压力测试场景,前端nginx反向代理到4个tomcat实例,在其中的一个实例上产生了大量的countDownConnection Incorrect connection count警告 WARNIN ...

  10. opencv2.4.10+VS2012配置问题

    opencv2.4.10+VS2012配置 作为opencv的初学者,第一个难题想必都一样,如何配置opencv+VS的环境呢?在网上的教程,铺天盖地,但我仍然是尝试了十几次才找到属于自己的那套配置方 ...