小编bka*_*uka的帖子

优雅处理Segfault

我正在用Python编写一个在Linux中使用闭源API的程序.API有时会起作用,有时会出现段错误 - 也会破坏我的程序.但是,如果程序运行10秒钟,它已经过了可能会出现分段并永远运行的点(错误只发生在开头).

我想我需要一些类型的脚本:

启动我的python程序,

等了10秒,

检查python是否仍在运行

如果它正在运行,脚本应该结束自己而不结束python

如果python没有运行,那么重复一遍.

这样的程序可能吗?段错也会杀死剧本吗?

python linux scripting segmentation-fault

8
推荐指数
1
解决办法
512
查看次数

每个位置参数的可选参数

使用argparse(或其他什么?)我希望每个位置参数都有一个带默认值的可选参数.

争论如下:

script.py arg1 arg2 -o 1 arg3 -o 2 arg4 arg5
Run Code Online (Sandbox Code Playgroud)

我希望它将其解析成可用的东西,比如位置参数列表和填充默认值的可选参数列表.例如,如果上例中的Optional的默认值为0:

positional = [arg1, arg2, arg3, arg4, arg5]
optional = [0, 1, 2, 0, 0]
Run Code Online (Sandbox Code Playgroud)

换句话说,parser.add_argument('-o', action='append')不是我想要的,因为我失去了位置参数,每个可选参数都与之相关联.

python argparse

5
推荐指数
1
解决办法
502
查看次数

格式化,如果尝试除了else代码块

我正在编写一个包含许多步骤和大量数据的数据分析程序.有时我想在途中保存泡菜,有时候不是.我将把这些保存称为"检查站".

如果咸菜文件是可读的,和一个全局变量PICKLETrue,我可以跳过一些分析步骤.布局代码的一种愚蠢但冗长的方式是这样的:

if PICKLE:
    try:
        with open('pickle1.pkl', 'rb') as f:
            data1 = pickle.load(f)
    except:
        # do things to generate data1
        temp = step1()
        data1 = step2(temp)

        with open('pickle1.pkl', 'wb') as f:
            pickle.dump(data1, f)
else:
    # do things to generate data1
    temp = step1()
    data1 = step2(temp)
Run Code Online (Sandbox Code Playgroud)

这只是我分析中许多人的"检查点",而进入这些"检查点"通常需要的不仅仅是两个步骤.因此,如上所述布置我的代码会产生大量重复的代码.

我可以通过将功能放入功能中来略微改进,但为了强调丑陋,我将展示2个检查点:

def generateData1():
    # do things
    return data1

def generateData2():
    # do things
    return data2

if PICKLE:
    try:
        with open('pickle1.pkl', 'rb') as f:
            data1 = pickle.load(f)
    except:
        data1 = …
Run Code Online (Sandbox Code Playgroud)

python layout readability

2
推荐指数
1
解决办法
111
查看次数