# 程序和文件都在同一层目录。
E:\PYCODES
| data.txt
| sample.py
hello
world
# 方式一:需要手动关闭文件。
file = open("data.txt", "r")
content = file.read()
file.close()
print(content)
# hello
# world
print("---------------")
# 方式二:自动关闭文件(更安全的做法)。
with open("data.txt") as file_object:
contents = file_object.read()
print(contents)
# hello
# world
# 文件在程序的上一层,可通过路径通配符读取相对路径。
# 路径盘符。(Unix:正斜线(/);windows:反斜线(\))
path = "..\\test.txt"
with open(path, encoding="UTF-8") as file_object:
contents = file_object.read()
print(contents)
# 我在上一级目录。
# 文件,可通过绝对路径进行读取。
path = "D:\\a\\test.txt"
with open(path, encoding="UTF-8") as file_object:
contents = file_object.read()
print(contents)
# 我在其他路径下。
path = "data.txt"
with open(path, encoding="UTF-8") as file_object:
for line in file_object:
# 换行符会被读取。
print(line)
# hello
#
# world
path = "data.txt"
with open(path, encoding="UTF-8") as file_object:
for line in file_object:
# rstrip() 去掉换行。
print(line.rstrip())
# hello
# world
# 文件不存在则会创建。
filename = "sample.txt"
# w 为写入模式。
with open(filename, "w") as file_object:
file_object.write("I love programming.")
filename = "sample.txt"
with open(filename, "w") as file_object:
# 多行时需要添加换行符。
file_object.write("I love programming.\n")
file_object.write("I love programming.\n")
filename = "sample.txt"
# a 为追加写入模式。
with open(filename, "a") as file_object:
file_object.write("I love programming.\n")
file_object.write("I love programming.\n")
json
模块让你能够将简单的 Python 数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
import json
# 准备要写入文件的数据。
data = {
"name": "jan",
"age": 18
}
# 文件名。
file_name = "test.json"
with open(file_name, "w") as file_object:
# 写入 json 数据。
json.dump(data, file_object)
with open(file_name, "r") as file_object:
# 读取 json 数据。
contents = json.load(file_object)
print("read contents={}".format(contents))
# read contents={'name': 'jan', 'age': 18}
即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。
# 0 不能作为除数,触发异常
>>> 10 * (1/0)
Traceback (most recent call last):
File "" , line 1, in ?
ZeroDivisionError: division by zero
# spam 未定义,触发异常
>>> 4 + spam*3
Traceback (most recent call last):
File "" , line 1, in ?
NameError: name 'spam' is not defined
# int 不能与 str 相加,触发异常
>>> '2' + 2
Traceback (most recent call last):
File "" , line 1, in <module>
TypeError: can only concatenate str (not "int") to str
try:
# 执行的代码。
except Exception:
# 发生异常时执行的代码。
try:
# 使其触发异常。
print(2 / 0)
except ZeroDivisionError:
print("除数不能为0!")
# 除数不能为0!
try
语句可能包含多个 except
子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。try
子句中的异常进行处理,而不是其他的 try
的处理程序中的异常。except
子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:except (RuntimeError, TypeError, NameError):
pass
try/except
语句还有一个可选的else
子句,如果使用这个子句,那么必须放在所有的except
子句之后。
try:
# 执行的代码。
except Exception:
# 发生异常时执行的代码。
else:
# 没有发生异常时执行的代码。
else
子句比把所有的语句都放在 try
子句里面要好,这样可以避免一些意想不到,而 except
又无法捕获的异常。try
子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。例如:def division_by_zero():
return 2 / 0
try:
# 被调用的函数内部发生异常。
result = division_by_zero()
# 异常则提示。
except ZeroDivisionError:
print("除数不能为0!")
# 除数不能为0!
except TypeError:
print("类型错误!")
else:
# 没有异常则打印返回结果。
print("result=" + str(result))
try / finally
语句无论是否发生异常都将执行最后的代码。
try:
# 执行的代码。
except Exception:
# 发生异常时执行的代码。
else:
# 没有发生异常时执行的代码。
finally:
# 无论如何都会执行。
try:
result = 2 + 2
except ZeroDivisionError:
print("除数不能为0!")
except TypeError:
print("类型错误!")
else:
print("result=" + str(result))
# result=4
finally:
print("这句代码无论如何都会被执行!")
# 这句代码无论如何都会被执行!
Python 使用
raise
语句抛出一个指定的异常。
raise [Exception [, args [, traceback]]]
num = 1
if num < 2:
raise Exception("数字不能小于2!当前值为{}。".format(num))
# Exception: 数字不能小于2!当前值为1。
Exception
类,可以直接继承,或者间接继承,例如:class MyError(Exception):
# Exception 默认的 __init__() 被覆盖。
def __init__(self, msg):
self.msg = msg
try:
raise MyError("捕获到了自定义异常!")
except MyError as e:
# 打印异常信息。
print(e.msg)
# 捕获到了自定义异常!
# 异常基类。
class Error(Exception):
pass
# 自定义异常子类。
class InputError(Error):
def __init__(self, expression, message):
self.expression = expression
self.message = message
# 自定义异常子类。
class TransitionError(Error):
def __init__(self, previous, next, message):
self.previous = previous
self.next = next
self.message = message
“-------怕什么真理无穷,进一寸有一寸的欢喜。”
微信公众号搜索:饺子泡牛奶。