python - 读取文件的文件内容并在发生异常时设置为空字符串的最佳方法

标签 python python-2.7

try:
    content = open("/tmp/out").read()
except:
    content = ""

我可以比这更短或更优雅吗?我必须对多个文件执行此操作,因此我想要更短的文件。

编写函数是唯一更短的方法吗?

我真正想要的是这个,但如果有任何异常,我想连接 ""

lines = (open("/var/log/log.1").read() + open("/var/log/log").read()).split("\n")

最佳答案

是的,你必须写一些类似的东西

def get_contents(filename):
    try:
        with open(filename) as f:
            return f.read()
    except EnvironmentError:
        return ''


lines = (get_contents('/var/log/log.1')
         + get_contents('/var/log/log')).split('\n')

NlightNFotis 提出了一个有效的观点,如果文件很大,您不想这样做。也许您会编写一个接受文件名列表的行生成器:

def get_lines(filenames):
    for fname in filenames:
        try:
           with open(fname) as f:
               for line in f:
                   yield line
        except EnvironmentError:
            continue


...

for line in get_lines(["/var/log/log.1", "/var/log/log"]):
    do_stuff(line)

另一种方法是使用标准的 fileinput.FileInput 类(感谢 J.F. Sebastian):

import fileinput

def eat_errors(f, mode):
    try:
        return open(f, mode)
    except IOError:
        return open(os.devnull)

for line in fileinput.FileInput(["/var/log/log.1", "/var/log/log"], openhook=eat_errors):
    do_stuff(line)

关于python - 读取文件的文件内容并在发生异常时设置为空字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14672178/

相关文章:

python - Poetry 可以从 AWS CodeArtifact 添加包吗

python - np.select 返回错误 "Wrong number of items passed 2, placement implies 1?"

python - 2.7.10 和 2.7.13 之间 dict.viewkeys() 和元组之间交集行为的差异

python - 如何优化对库函数(例如 random.random)的多次调用?

javascript - 如何将 javascript 数组转换为 python 字典

python - AttributeError ("' str' 对象没有属性 'read'")

python - 我的插入语句执行了两次,我不知道为什么。 sqlite3

python - 在 Python 中将 SVG 转换为 PNG

Python 删除错误

python - from django.db import utils ImportError 无法导入名称 utils?