【python基础】3.输入和输出
输入和输出
输入
命令行参数
通过sys.argv
获取命令行参数,sys.argv[0]
表示脚本名,sys.argv[1]
表示第一个参数,以此类推。
import sys
print(sys.argv[0])
print(sys.argv[1])
argparse模块
argparse模块是用于解析命令行参数和选项的标准模块,可以用于生成用户友好的命令行界面。
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print(args.accumulate(args.integers))
文件和文件对象
文件对象
文件对象是对计算机中的文件进行操作的对象,文件对象可以通过open()
函数创建。
f = open('test.txt', 'r')
其中model参数有:
- r:读取模式
- w:写入模式,如果文件已存在,则清空文件内容
- a:追加模式
- b:二进制模式
- +:读写模式,更新
- t:文本模式、
文件的打开、写入、读取和关闭
f = open('test.txt', 'w')
f.write('Hello, world!')
f.close()
with语句
with
语句可以自动调用close()
方法,所以不需要手动调用close()
方法。
with open('test.txt', 'w') as f:
f.write('Hello, world!')
标准输入输出
标准输入
sys.stdin
表示标准输入,可以使用sys.stdin.readline()
读取一行内容。
import sys
for line in sys.stdin:
print(line)
标准输出
sys.stdout
表示标准输出,可以使用sys.stdout.write()
输出一行内容。
import sys
sys.stdout.write('Hello, world!')
重定向输入和输出
重定向输入
将输入重定向到文件中,输入的内容将不会从终端上读取。
import sys
with open('test.txt', 'r') as f:
sys.stdin = f
for line in sys.stdin:
print(line)
重定向输出
将输出重定向到文件中,输出的内容将不会显示在终端上。
import sys
with open('test.txt', 'w') as f:
sys.stdout = f
print('Hello, world!')
管道和过滤器
管道和过滤器是一种常见的编程模式,可以将多个程序连接在一起,前一个程序的输出作为后一个程序的输入。
python randomseq.py 1000 | python average.py
:将randomseq.py
的输出作为average.py
的输入。
错误和异常处理
引发异常
raise语句
raise
语句用于引发异常,可以使用raise
语句引发一个指定的异常。
if x < 0:
raise Exception('x should not be negative.')
异常处理
try-except语句
通过try语句定义可能出现异常的代码块,通过except语句处理异常。else语句在没有异常时执行,finally语句无论是否有异常都会执行。
try:
print(1 / 0)
except ZeroDivisionError:
print('division by zero')
else
print('no exception')
finally:
print('finally')
except顺序
如果一个异常可以被多个except子句处理,那么它将被第一个处理。
Exception类是所有异常派生类的父类,在Exception类后的异常处理无法捕获异常。
自定义异常
可以通过继承Exception类来自定义异常。
class NumberError(Exception):
def __init__(self, number):
self.number = number
def __str__(self):
return 'NumberError: {}'.format(self.number)
try:
raise NumberError(1)
except NumberError as e:
print(e)
断言
断言用于判断一个表达式,在表达式为False时引发异常。
在运行时通过python -O assert.py禁用断言。
assert x > 0, 'x should be positive'
日志模块
Python 标准库提供了用于记录日志的模块logging
。
logger
: 日志模块的入口,可以通过logging.getLogger()
获取。handler
: 日志处理器,可以将日志输出到文件、终端等。formatter
: 日志格式化器,可以设置日志的格式。filter
: 日志过滤器,可以设置日志的过滤规则。
import logging
logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler('mylogger.log')
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.debug('debug message')
logger.info('info message')
logger.warning('warning message')
logger.error('error message')
logger.critical('critical message')
basicConfig
logging.basicConfig()
用于配置日志模块,可以设置日志的级别、格式、处理器等。
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='mylogger.log')
logging.info('info message')