Python中的sys.stderr属性代表标准错误输出流,默认情况下也是输出到控制台的。在运行Python程序时,如果发生了异常或错误,就会被输出到标准错误输出流中。
在Python脚本中,可以通过直接使用sys.stderr输出错误信息:
import sys
try:
f = open('non_existent_file.txt')
except FileNotFoundError as e:
sys.stderr.write(str(e)[:50]) # 输出前50个错误信息
输出结果为:
[Errno 2] No such file or directory: 'non_existent_file
如果需要将标准错误输出流重定向到文件或其他流中,可以使用sys.stderr的重定向方法。下面的例子将标准错误输出流重定向到指定文件中:
import sys
sys.stderr = open('error.log', 'w')
print("This will be printed to stdout.")
print("This is an error message", file=sys.stderr)
输出结果为:
This will be printed to stdout.
error.log文件中:
This is an error message
两个实例说明:
在命令行程序中使用sys.stderr输出错误信息是非常常见的。例如,下面的示例是一个简单的命令行程序,它从命令行接收一个文件名作为参数,读取该文件并输出到控制台。如果文件不存在,则使用sys.stderr输出错误信息:
import sys
if len(sys.argv) != 2:
sys.stderr.write("Usage: python read_file.py [filename]\n")
sys.exit(1)
try:
f = open(sys.argv[1])
print(f.read())
f.close()
except FileNotFoundError as e:
sys.stderr.write(str(e) + '\n')
sys.exit(1)
在应用程序中使用日志记录器时,经常需要将错误信息记录到日志文件中。下面的示例演示了如何使用sys.stderr输出错误信息,并将其记录到日志文件中:
import logging
import sys
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.INFO)
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
stdout_handler.setFormatter(formatter)
stderr_handler.setFormatter(formatter)
logger.addHandler(stdout_handler)
logger.addHandler(stderr_handler)
def divide(a, b):
try:
result = a / b
return result
except ZeroDivisionError as e:
logger.error(str(e), exc_info=True)
sys.stderr.write("Error: division by zero\n")
return None
result = divide(10, 0)
print(result)
输出结果为:
Error: division by zero
None
以上就是sys.stderr属性的用法和两个实例的详细讲解。
本文链接:http://task.lmcjl.com/news/3864.html