【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')
posted @ 2024-01-04 11:15  asdio  阅读(19)  评论(0)    收藏  举报