Hexo


  • 首页

  • 归档

python中常见的异常类型

发表于 2017-11-30 | 分类于 Python

Python中常见的错误类型:

  • NameError:尝试访问一个未申明的变量
1
2
>>> v
NameError: name 'v' is not defined
  • ZeroDivisionError:除数为0
1
2
>>> v = 1/0
ZeroDivisionError: int division or modulo by zero
  • SyntaxError:语法错误
1
2
int int
SyntaxError: invalid syntax (<pyshell#14>, line 1)
  • IndexError:索引超出范围
1
2
3
4
5
6
List = [2]
>>> List[3]
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
List[3]
IndexError: list index out of range
  • KeyError:字典关键字不存在
1
2
3
4
5
6
Dic = {'1':'yes', '2':'no'}
>>> Dic['3']
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
Dic['3']
KeyError: '3'
  • IOError:输入输出错误
1
2
>>> f = open('abc')
IOError: [Errno 2] No such file or directory: 'abc'
  • AttributeError:访问未知对象属性
1
2
3
4
5
6
7
8
9
10
>>> class Worker:
def Work():
print("I am working")

>>> w = Worker()
>>> w.a
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
w.a
AttributeError: 'Worker' object has no attribute 'a'
  • ValueError:数值错误
1
2
3
4
5
>>> int('d')
Traceback (most recent call last):
File "<pyshell#54>", line 1, in <module>
int('d')
ValueError: invalid literal for int() with base 10: 'd'
  • TypeError:类型错误
1
2
3
4
5
6
7
>>> iStr = '22'
>>> iVal = 22
>>> obj = iStr + iVal;
Traceback (most recent call last):
File "<pyshell#68>", line 1, in <module>
obj = iStr + iVal;
TypeError: Can't convert 'int' object to str implicitly
  • AssertionError:断言错误
1
2
3
4
5
>>> assert 1 != 1
Traceback (most recent call last):
File "<pyshell#70>", line 1, in <module>
assert 1 != 1
AssertionError
  • MemoryError:内存耗尽异常
  • NotImplementedError:方法没实现引起的异常
1
2
3
4
5
6
7
class Base(object):
def __init__(self):
pass

def action(self):
#抛出异常,说明该接口方法未实现
raise NotImplementedError
  • LookupError:键、值不存在引发的异常

LookupError异常是IndexError、KeyError的基类, 如果你不确定数据类型是字典还是列表时,可以用LookupError捕获此异常

  • StandardError: 标准异常

除StopIteration, GeneratorExit, KeyboardInterrupt 和SystemExit外,其他异常都是StandarError的子类。

Python基础库之Math库

发表于 2017-11-30 | 分类于 Python

Python中提供了Math库,用于进行数学计算。

使用时,只需在文件开始导入即可import math

常用的函数及其功能如下表:

函数名 函数功能 说明/示例
math.acos(x) 返回 x 的反余弦
math.acosh(x) 返回 x 的反双曲余弦
math.asin(x) 返回 x 的反正弦
math.asinh(x) 返回 x 的反双曲正弦
math.atan(x) 返回 x 的反正切
math.atan2(y,x) 返回 y/x 的反正切
math.atanh(x) 返回 x 的反双曲正切
math.ceil(x) 返回≧ x 的最小整数 math.ceil(3.4) 結果 4.0
math.copysign(x,y) 返回与 y 同号的 x 值 math.copysign(-1.9, 2.9) 返回1.9
math.cos(x) 返回 x 的余弦
math.cosh(x) 返回 x 的双曲余弦
math.degrees(x) 將 x (弧长) 转成角度,与 radians 为反函数
math.e 常数 e = 2.7128…
math.exp(x) 返回 ex也就是 math.e**x
math.fabs(x) 返回 x 的绝对值
math.factorial(x) 返回 x!
math.floor(x) 返回 ≦ x 的最大整数 math.floor(3.4) 結果 3.0
math.fmod(x,y) 返回 x对y取模的余数fmod 类似 %,但产生的结果可能与%不同,因为前者以y来决定余数的符号,后者以x来决定余数的符号。 print(-2%3,math.fmod(-2,3))返回 (1, -2.0)
math.frexp(x) Return the mantissa and exponent of x, as pair (m, e). m is a float and e is an int, such that x = m 2.*e. If x is 0, m and e are both 0. Else 0.5 <= abs(m) < 1.0. math.frexp(1.625) 返回(0.8125,1)
math.fsum(x) 返回 x 阵列值的各項和( 无损精度的和) 0.1+0.2+0.3 返回0.6000000000000001 math.fsum([0.1, 0.2,0.3]) 返回0.6
math.hypot(x,y) 返回 √x2+y2 (以x和y为直角边的斜边长) math.hypot(3,4) 返回5.0
math.isinf(x) 若x不是数字,返回True;否则,返回False math.isnan(1.2e3) 返回False
math.isnan(x) 如果 x = Non (not a number)返回 True
math.ldexp(m,n) 返回 m×2n与 frexp 是反函数
math.log(x,a) 返回logax 若不写a 默认为e
math.log10(x) 返回log10x
math.modf(x) 返回 x 的小数部份与整数部份 math.modf(2.123) 返回 (0.1231230000000001, 2.0)
math.pi 常数 π (3.14159…)
math.pow(x,y) 返回 xy
math.radians(d) 将 x(角度) 转成弧长,与 degrees 为反函数
math.sin(x) 返回 x 的正弦
math.sinh(x) 返回 x 的双曲正弦
math.sqrt(x) 返回√x
math.sqrt(x) 返回 x 的正切
math.tanh(x) 返回 x 的双曲正切
math.trunc(x) 返回 x 的整数部份,等同 int

GitHub Pages + Hexo搭建博客

发表于 2017-11-28 | 分类于 Github

此文转载于crazymilk 感谢原博主的整理

一、 前言

这是一篇使用GitHub Pages和Hexo搭建免费独立博客的总结。

作为一个前端小白,虽说是个码农,但是一开始照着网上的各种教程去搭建的时候,还是云里雾里的。记得几个月前刚接触GitHub(哈哈,对大四来说确实有点晚),对版本控制一点概念都没有,更别说使用GitHub Page能做出一个好看又好用的博客了。所以第一次的尝试失败了。

后来的两三个月里,开始逐渐地把日常的学习都迁移到GitHub上进行,慢慢熟悉了Git的版本控制。之后,因为嫌弃csdn和博客园的样子(颜值控),最终又回归到搭建独立博客的光明大道上。

我所总结的是单纯地利用GitHub Pages搭建自己独立博客的过程,并没有额外使用独立域名之类的(谁让我现在还没工资 o(^▽^)o )。

阅读全文 »

jupyter notebook如何更改默认的根目录

发表于 2017-11-28 | 分类于 jupyter , python

Jupyter Notebook 是一款集编程和写作于一体的效率工具。

默认安装好改工具,启动完成后读取的是当前用户的根目录。如何更改工具的默认读取路径呢?

  1. 打开终端工具 输入命令 jupyter notebook –generate-config

  2. 系统提示

    Writing default config to: /Users/**/.jupyter/jupyter_notebook_config.py

  3. 进入到jupyter_notebook_config.py文件所在的目录,打开该文件

  4. conf.jpg参照上图 将202行的代码注释取消掉 然后引号后面的参数填写自己需要作为根目录的路径。

  5. 保存,重启Jupyter Notebook 。

  6. Over~

Android中将dp转换为像素值

发表于 2017-10-16 | 分类于 Android

如何在Android中将dp转换为像素值?

在某些情况下,您需要以 dp 表示尺寸,然后将它们转换为 像素。设想一个在用户 手指移动至少 16 像素之后可以识别滚动或滑动手势的应用。在基线屏幕上,用户必须移动 16 pixels / 160 dpi(等于一英寸的 1/10 或 2.5 毫米),然后才会识别该手势。在 具有高密度显示屏 (240dpi) 的设备上,用户必须移动 16 pixels / 240 dpi(等于 一英寸的 1/15 或 1.7 毫米)。此距离更短,应用因此 似乎对用户更灵敏。

1
2
3
4
5
6
7
8
9
// The gesture threshold expressed in dp
private static final float GESTURE_THRESHOLD_DP = 16.0f;

// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels...

DisplayMetrics.density字段根据当前屏幕密度指定 将 dp 单位转换为像素必须使用的缩放系数。 在中密度屏幕上,DisplayMetrics.density等于 1.0;在高密度屏幕上,它等于 1.5;在超高密度屏幕上,等于 2.0; 在低密度屏幕上,等于 0.75。此数字是一个系数,应用其乘以 dp 单位以获取用于当前屏幕的实际像素数。(然后在转换时加上 0.5f,将该数字四舍五入到最接近的整数。)

如需了解 详细信息,请参阅 DisplayMetrics 类。

来源:https://developer.android.com/guide/practices/screens_support.html

Flex布局

发表于 2017-09-10 | 分类于 CSS

什么是Flex布局?

如何使浏览器返回?

发表于 2017-08-31 | 分类于 JavaScript

两种返回的方式

  • history.back(-1)

    1
    history.back(-1)//直接返回当前页的上一页,数据全部消息,是个新页面
  • history.go(-1)

    1
    history.go(-1)//也是返回当前页的上一页,不过表单里的数据全部还在

返回、前进页面方法下面总结

1
2
3
4
5
window.location.reload() //刷新
window.history.go(1) //前进
window.history.go(-1) //后退
window.history.forward() //前进
window.history.back() //后退+刷新

git常见问题汇总(长期更新中...)

发表于 2017-08-25 | 分类于 Github

git log如何退出

在调用git log命令之后,会在查看日志的同时进入到命令模式,可以在命令中直接输入英文状态下”q”字母,退出该模式。

(转)javascript王国的一次旅行,一个没有类的世界怎么玩转面向对象?

发表于 2017-08-25 | 分类于 JavaScript

前言

作为Java 帝国的未来继承人,Java小王子受到了严格的教育, 不但精通Java语言、Java虚拟机、java类库和框架,还对各种官方的Java规范了如指掌。

近日他听说一个叫做Javascript的屌丝逆袭了, 成功地建立了一个独立的王国, 不但成了前端编程之王, 还不断地蚕食Java帝国的领地 !

按照小王子宫廷老师的说法: 想当年, 这家伙只是运行在浏览器中,完完全全是蹭了Java的热度这才发展起来, 现在竟然回过头来要欺负我们, 还有没有天理了? 是可忍孰不可忍? !

小王子可不这么认为, 存在必然是合理的,javascrip必有独特之处, 俗话说知己知彼,百战不殆,他觉得有必要去Javascript王国刺探一下,搜集一下情报, 看看这个曾经的浏览器中的面向对象语言是怎么回事, 为什么那么多码农趋之若鹜。

初步印象

乔装打扮以后,小王子来到Javascript 王国,这里看起来一派生气勃勃的景象,人们随性而奔放, 不像Java帝国那么严肃而呆板, 让人感觉心情愉悦。

不过令小王子感到不可思议的是, 这里竟然没有官方提供的类库! 人们干活用的工具五花八门,让人眼花缭乱, 什么AngularJS, React , Backbone,Vue, Ember,JQuery, …… 互相之间还吵来吵去,争来争去,煞是热闹。

对比这下,Java帝国有着严密的统治,有着官方提供的庞大类库, 还有一统天下的Web框架 SSH/SSM ,再加上各种各样的Java规范, 码农们只需要拿来学习,干活就行。

没有了选择的烦恼, 但同时也减少了选择的权利, 是好还是坏? 小王子自己也不知道。

小王子还注意到Javascript王国的人写程序几乎没人使用IDE, 找个趁手的文本编辑器就可以开工, 然后扔到浏览器中去运行测试,真是轻量级啊! 唉, 我们Java帝国还在争论IntelliJ IDEA和Eclipse孰优孰劣, 实在是没有必要啊。

没有类怎么创建对象?

随着调查的深入,小王子愈发觉得吃惊, 这里竟然没有类的概念! 一个面向对象的语言竟然没有类! 这和小王子从出生就被灌输的概念可是背道而驰!

没有类怎么创建对象 ? 小时候宫廷老师经常说: 先写一个类, 然后才能从这个类new出一个对象出来 。

可是眼前却有着无数的javascript对象, 他们在不断地产生、消亡,一起辛苦地工作,支撑起庞大的、生机勃勃的帝国。

这些对象是从哪里来的? 小王子百思不得其解, 正值正午时分, 小王子看到前面有一家JSON酒馆,决定先歇歇脚,美美地吃一顿再说。

小王子要了二斤熟牛肉,三碗酒,正要开始享用, 只听到旁边桌子的一个穿着长袍的人问道:哎,你说的那个对象的原型是什么? 

另一位戴眼镜的则低声说:嘘,噤声,国王刚颁布命令,原型法是我们帝国的秘密,禁止公开讨论,以防被Java帝国给学了去。

小王子心中一动, 马上把小二叫来,要来上等酒菜, 送到邻桌,请两位吃酒。 一番酒喝下来, 小王子终于获得了两人的初步信任, 原来他们还是负责审查javscript语言规范的官员。

小王子问道: “我家世代经商, 走南闯北,去过C++王国,Java帝国, C#帝国, 他们都是号称面向对象的语言, 都有class 和 object的区分, 可是到了咱们javascript王国, 我怎么连一个class 都没有看到啊? ”

戴眼镜的官员说: “我们不用class, 那玩意儿太不直观了 !”

小王子暗暗称奇, 可是仔细一想, 好像就是这样啊, 想当初我学习Java的时候, 费了好大的劲才接受了class这个概念,实际上面向对象的系统,不就是对象之间的交互吗? 要类干什么?

然后小王子问了一个关键问题: “没有class, 怎么创建对象啊”

“外乡人, 没那么复杂,你想想什么是对象啊,不就是属性加上方法吗? 你看看我们这就创建一个对象出来 ” 这位官员说着,手指头沾着酒水在桌子上写了起来:

one

看到没有,这个animal对象定义了一个属性name, 和一个方法 eat , 简单吧?”

的确是简单又明了,完全不需要class, 一个对象就创建了,小王子面前似乎打开了一扇新的大门。

“由于对象并不和类关联, 我们可以随意地给这个对象增加属性:” 眼镜官员补充到

two

“还能这么玩?!” 小王子被惊到了,没有类的约束,这些对象也太自由了吧。

没有类怎么继承?

“那继承怎么实现, 继承可是面向对象的重要概念啊”

眼镜官员说: “简单啊,继承不就是让两个对象建立关联嘛! 在我们javascript王国,每个对象都有一个特殊的属性叫做__proto__, 你可以用这个属性去关联另外一个对象(这个对象就是所谓的原型了) , 来我给你画一下”

three

这段酒水写成的代码不长,但是却深深地震撼了小王子, 因为其中信息量非常巨大,隐藏了“原型”的秘密, 小王子不由得陷入了深思:

对象dog 的原型是animal (注意:也是一个对象), 对象cat的原型也是animal 。

无论是dog还是cat ,都没有定义eat()方法, 那怎么可以调用呢?

当eat方法被调用的时候,先在自己的方法列表中寻找, 如果找不到,就去找原型中的方法, 如果原型中找不到, 就去原型的原型中去寻找…… 最后找到Object那里, 如果还找不到, 那就是未定义了。

这里的这几个对象肯定是通过__proto__建立了一个原型链!

four

嗯, 我师父给我讲JVM虚拟机的时候, 也提到了一个对象在执行方法的时候,需要查找方法的定义,这个查找的次序也是先从本对象所属的类开始, 然后父类, 然后父类的父类…… 直到Object, 思路是一模一样的!

只不过Java 的方法定义是在class中, 而这个javascript 的方法就在对象里边, 现在我觉得似乎在对象里更加直观一点啊。

属性和方法应该类似,也是沿着原型链向上查找, 不过这里dog的name属性似乎覆盖了animal的name属性, 还有那个this, 在调用dog.eat()的时候,应该是指向dog这个对象的。

看来面向对象的理念都是想通的啊。 想着想着,小王子脸上竟然露出了笑容。

看到小王子像程序卡住一样,不动了, 穿长袍的官员推了小王子一把: 外乡人, 你怎么了?

小王子意识到自己的失态, 赶紧说: “哦,没啥, 我觉得你们使用的这个’原型‘的办法很精妙啊, 完全不用类就实现了继承。”

眼镜官员一愣: “外乡人, 看来你悟性不错, 帝国的秘密已经被你给洞察了, 不过很多新来的程序员就不容易体会到这一点, 于是我们就做了一个变通, 让javascript可以像Java那样new 出对象出来。说来惭愧, 这完全是为了迁就那些C++,Java, C#程序员啊 ”

向Java靠拢

小王子说:”什么变通办法? 难道你们也开始使用类了吗?“

“不不, 我们提供了一个叫做构造函数的东西。还是给你写点儿代码吧 ” 官员说着,又蘸着酒水写了起来:

five

小王子说道: “那个function 已经有点 class的感觉了啊, 天呐我竟然看到了this这个关键字, 对了那个Student是你故意写的大写吗? ”

“是啊 , 这样以来看起来就像Java的类了。但是,中间有个问题,你看出来了吗? ”

小王子想了一阵:“ 是不是说每个新创建对象都有一个sayHello函数? 在Java中函数都是定义在class 上的。 如果定义对象上, 那就意味着每个对象都有一份, 太浪费了。”

“是的,所以我们得提供一种更加高效的办法, 把这个sayHello函数放到另外一个地方去! ”

“放到哪里? ”

“记得我们刚才说的原型链吗? 当一个对象调用方法的时候,会顺着链向上找,所以我们可以创建一个原型对象,其中包含sayHello函数, 让andy, lisa这些从Student创建起来的对象指向这个原型就ok了。”

“可是你这里只有构造函数Student, 在哪里创建原型对象呢? 怎么把andy,lisa 这些对象的proto指向原型对象呢? 不会让我手工来指定吧。”

眼镜官员瞪了一眼小王子说: “我们javascript帝国肯定不会这么麻烦程序员的, 我们可以把这个原型对象放到Student.prototype这个属性中(注意,不是__proto__), 这样一来,每次当你创建andy,lisa这样的对象时, javascript 就会自动的把原型链给建立起来!”

six

小王子面露难色:“唉,这理解起来有点难啊。”

“还是画个图吧, 当你去new Student的时候,javascript会建立这样的关系链:”

seven

小王子说: “明白了,这个所谓的构造函数Student 其实就是一个幌子啊, 每次去new Student的时候,确实会创建一个对象出来(andy或者lisa) , 并且把这个对象的原型(__proto__)指向 Student.prototype这个对象,这样一来就能找到sayHello()方法了。”

眼镜官员回答:“没错,这个地方容易让人混淆的就是__proto__和prototype这两个属性, 唉,我也不知道最早为什么这么干, 实在是不优雅。”

“是啊,这个构造函数再加上prototype的概念,实在是让人费解, 所以我们商量着提供一点语法糖降低程序员的负担。” 长袍官员附和到。

语法糖

听到语法糖,小王子觉的很亲切, 因为Java 中也提供了很多方便程序员的语法糖。

当长袍官员写出javascript的语法糖的时候, 小王子不由得大吃一惊:

eight

这语法糖已经把javascript变得非常像Java, C#,C++的类了, 看来javascript帝国为了“讨好”程序员, 已经努力的在改变了, 我们java帝国看来得加油啊。

小王子现在明白了Javascript是一个基于原型实现的面向对象的语言, 根本没有类的概念, 新的方式给小王子的思维观念带来了重大的冲击。

在这里待久了,他又了解到javascript强大的函数式编程,越来越喜欢javascript, 都有点乐不思蜀了。

小王子还会回到Java帝国吗?

关于该文章

  最近学习JavaScript语言,实在难以理解js当中的构造函数、_proto_、以及原型链等相关的概念。无意间读到该篇文章,作者以讲故事的口吻,形象而又结构清晰的讲述清楚了各个概念之间的关系。因之前有Java语言基础,所以对文中作者的对比java的描述感受贴切!特转此文章,以便后面学习反复阅读!

原文链接:http://www.cnblogs.com/aishangJava/p/7232680.html

JavaScript instanceof

发表于 2017-08-24 | 分类于 JavaScript

JavaScript instanceof 运算符代码

1
2
3
4
5
6
7
8
9
10
11
function instance_of(L, R) {//L 表示左表达式,R 表示右表达式
var O = R.prototype;// 取 R 的显示原型
L = L.__proto__;// 取 L 的隐式原型
while (true) {
if (L === null)
return false;
if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true
return true;
L = L.__proto__;
}
}
123

HaoZ

This is a simple website, I will try record something that I studying!

28 日志
14 分类
43 标签
RSS
© 2018 HaoZ
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4