报错信息
$ python ex/ex1.py File "ex/ex1.py", line 3 print "I like typing this. ^ SyntaxError: EOL while scanning string literal
- 首先在命令行运行 ex1.py 脚本;
- Python 告诉 ex1.py 文件的第 3 行有一个错误;
- 接着这一行的内容被打印了出来;
- 然后 Python 打印出了一个 ^ 符号,用来指示出错的位置;
- 最后,打印出一个“语法错误”(SyntaxError)告诉用户是什么样的错误;
Python标准异常总结AssertionError 断言语句(assert)失败AttributeError 尝试访问未知的对象属性EOFError 用户输入文件末尾标志EOF(Ctrl+d)FloatingPointError 浮点计算错误GeneratorExit generator.close()方法被调用的时候ImportError 导入模块失败的时候IndexError 索引超出序列的范围KeyError 字典中查找一个不存在的关键字KeyboardInterrupt 用户输入中断键(Ctrl+c)MemoryError 内存溢出(可通过删除对象释放内存)NameError 尝试访问一个不存在的变量NotImplementedError 尚未实现的方法OSError 操作系统产生的异常(例如打开一个不存在的文件)OverflowError 数值运算超出最大限制ReferenceError 弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象RuntimeError 一般的运行时错误StopIteration 迭代器没有更多的值SyntaxError Python的语法错误IndentationError 缩进错误TabError Tab和空格混合使用SystemError Python编译器系统错误SystemExit Python编译器进程被关闭TypeError 不同类型间的无效操作UnboundLocalError 访问一个未初始化的本地变量(NameError的子类)UnicodeError Unicode相关的错误(ValueError的子类)UnicodeEncodeError Unicode编码时的错误(UnicodeError的子类)UnicodeDecodeError Unicode解码时的错误(UnicodeError的子类)UnicodeTranslateError Unicode转换时的错误(UnicodeError的子类)ValueError 传入无效的参数ZeroDivisionError 除数为零
小技巧
在 python 脚本最前面加上 “ # -*- coding: utf-8 -*-”,这样脚本就会使用 unicode UTF-8 编码;
在 Pyhton 中,# 是注释的意思,那么 # -*- coding: utf-8 -*- 为什么会被执行?
其实 Python 仍然会忽略这句代码,但是它却可以作为“黑客”或者解决问题的方法来制定文件的格式,还可以在编辑器设置中找到其他类似的注释;
在笨方法学 Python 中,推荐从后向前阅读代码,这其实是一种期盼大脑的做法,这样能让大脑在没有附加意义的情况下理解每一部分代码,同时能让你正确的处理每一块代码,这是一个方法捕获错误,检测错误的技术;
out_file = open(to_file, 'w')
为什么这个 w 需要写在引号里:
它只是个字符串。
格式化字符串
字符串是程序将信息展示给人的方式,可以打印它们,可以将它们写入文件,还可以将它们发送给网站服务器,很多事情都是通过字符串交流实现的;
程序就是接受用户的输入、处理、输出结果给用户
%c 转换成字符(ASCII 码值,或者长度为一的字符串)%r 优先用repr()函数进行字符串转换(Python2.0新增)%s 优先用str()函数进行字符串转换%d / %i 转成有符号十进制数%u 转成无符号十进制数%o 转成无符号八进制数%x / %X (Unsigned)转成无符号十六进制数(x / X 代表转换后的十六进制字符的大小写)%e / %E 转成科学计数法(e / E控制输出e / E)%f / %F 转成浮点数(小数部分自然截断)%g / %G %e和%f / %E和%F 的简写%% 输出%
但是尽量在做调试的时候使用 %r,%r 显示的是变量的“原始”的数据值,%r 在打印的时候能够重现它代表的对象,%r 格式的工作原理:你如何输入,它就如何打印输出;
函数
函数 Function,过程 Procedure,方法 Method,你可以简单把他们当做同一个概念:都是由若干语句组成的一个可执行代码体。
调用函数的一种方式,函数接受命令的方式是使用句点 . (英文称作 dot 或 period),紧跟着命令,然后是类似 open 和 raw_input 一样的参数,不同点是:当你执行 txt.read 时,你的意思其实是:“嘿 txt!执行你的 read 命令,无需任何参数!”
from sys import argv from os.path import exists
以前一直有疑问,既然需要使用这个库,为什么还要 from A import B,只导入其中一个模块呢?
处于代码的易读性考虑,列出模块的名字,更好的帮助阅读者理解代码的意义,还有就是处于程序大小方面的考虑。
函数可以做三样事情:
1、它们给代码片段命名,就跟“变量”给字符串和数字命名一样;
2、它们可以接受参数,就跟你的脚本接受 argv 一样;
3、通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”;