| Python | PHP |
错误捕获 | try...except...else…finally... 可以不存在finally,如果有则会执行 else也可以没有,如果存在,当没有错误的时候会被执行 可以使用多个except来捕获不同类型的错误
错误类型其实是个类,继承于BaseException 并且会自动捕获当前错误类下的子类错误,不需要重复except
| try…catch… |
错误类型继承关系 | BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit +-- Exception +-- StopIteration +-- StopAsyncIteration +-- ArithmeticError | +-- FloatingPointError | +-- OverflowError | +-- ZeroDivisionError +-- AssertionError +-- AttributeError +-- BufferError +-- EOFError +-- ImportError | +-- ModuleNotFoundError +-- LookupError | +-- IndexError | +-- KeyError +-- MemoryError +-- NameError | +-- UnboundLocalError +-- OSError | +-- BlockingIOError | +-- ChildProcessError | +-- ConnectionError | | +-- BrokenPipeError | | +-- ConnectionAbortedError | | +-- ConnectionRefusedError | | +-- ConnectionResetError | +-- FileExistsError | +-- FileNotFoundError | +-- InterruptedError | +-- IsADirectoryError |
|
| Python | PHP |
| | +-- NotADirectoryError | +-- PermissionError | +-- ProcessLookupError | +-- TimeoutError +-- ReferenceError +-- RuntimeError | +-- NotImplementedError | +-- RecursionError +-- SyntaxError | +-- IndentationError | +-- TabError +-- SystemError +-- TypeError +-- ValueError | +-- UnicodeError | +-- UnicodeDecodeError | +-- UnicodeEncodeError | +-- UnicodeTranslateError +-- Warning +-- DeprecationWarning +-- PendingDeprecationWarning +-- RuntimeWarning +-- SyntaxWarning +-- UserWarning +-- FutureWarning +-- ImportWarning +-- UnicodeWarning +-- BytesWarning +-- ResourceWarning |
|
logging模块
可以配置成日志记录模式 | 可以记录错误,并且不会停止程序 import logging def foo(s): return 10 / int(s) def bar(s): return foo(s) * 2 def main(): try: bar('0') except Exception as e: logging.exception(e) main() print('END') |
|
| Python | PHP |
错误抛出 | raise 需要自己先定义一个错误类,选择正确的继承关系
或者是直接抛出错误描述 def foo(s): n = int(s) if n==0: raise ValueError('invalid value: %s' % s) return 10 / n def bar(): try: foo('0') except ValueError as e: print('ValueError!') raise bar() | throw |
| Python | PHP |
打开文件 | f = open(' path', 'type ') r:只读 w:清空写 a:追加写
二进制文件(图片、视频) 采用'rb'模式打开
读取非utf-8编码文本文件,需要第三个参数encoding='gbk'
编码错误的忽略方法,加入第四个参数 errors='ignore' | $f = fopen('path ', 'type ') r:只读 r+:读写 w:清空后只写,文件不存在的时候会创建 w+:清空后读写,文件不存在的时候会创建 a:追加只写,文件不存在的时候会创建 a+:追加读写,文件不存在的时候会创建
|
读文件 | f.read(size)读取指定长度 f.readline()读取一行 f.readlines()读取全部内容返回list | fread($f,size) |
写文件 | 需要在'w'或'wb'模式下打开文件 f.write('content') |
|
关闭文件 | f.close() 自动调用写法 with open('/path/to/file', 'r') as f: print(f.read()) | fclose($f) |
内存读写 StringIO
使用getvalue()获取数据 | from io import StringIO f = StringIO() f.write('hello') f.write(' ') f.write('world!') print(f.getvalue()) |
|
内存读写 BytesIO
|
from io import BytesIO f = BytesIO() f.write('中文'.encode('utf-8')) print(f.getvalue()) |
|
| Python | PHP |
操作文件和目录 |
|
|
系统信息 | import os print(os.name) |
|
环境变量 | print(os.environ)
print(os.environ.get('key'))
|
|
操作文件和目录 | 函数分两个模块 os模块 os.path模块 |
|
查看当前目录绝对路径 | print(os.path.abspath('.'))
|
|
路径拼接 | print(os.path.join('/Users/michael', 'testdir'))
|
|
目录创建 | os.mkdir('/Users/michael/testdir')
|
|
目录删除 | os.rmdir('/Users/michael/testdir')
|
|
拆分路径 会把最后一部分的文件名切出来 | print(os.path.split('/Users/michael/testdir/file.txt'))
|
|
获取文件扩展名 | print(os.path.splitext('/path/to/file.txt'))
|
|
文件重命名 | os.rename('test.txt', 'test.py')
|
|
文件删除 | os.remove('test.py')
|
|
获取当前目录下的所有目录 | print([x for x in os.listdir('.') if os.path.isdir(x)])
|
|
获取指定后缀名的文件 | print( [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'])
|
|
| Python | PHP |
序列化 | picking import pickle d = dict(name='Bob', age=20, score=88) print(pickle.dumps(d))
| serialize() |
反序列化 | unpicking f= open('dump.txt', 'rb') d = pickle.load(f) f.close()
| unserialize() |
json | import json d = dict(name='Bob', age=20, score=88) print(json.dumps(d))
| json_encode() |
| json_str = '{"age": 20, "score": 88, "name": "Bob"}' print(json.loads(json_str))
| json_decode() |
对象的json化 | 需要传入第二个参数default import json class Student(object): def __init__(self, name, age, score): self.name = name self.age = age self.score = score s = Student('Bob', 20, 88) print(json.dumps(s,default=lambda obj: obj.__dict__))
|
|
json对象化 | json_str = '{"age": 20, "score": 88, "name": "Bob"}' def dict2student(d): return Student(d['name'], d['age'], d['score']) print(json.loads(json_str, object_hook=dict2student))
|
|