小编spi*_*zak的帖子

在Python中捕获KeyError

如果我运行代码:

connection = manager.connect("I2Cx")
Run Code Online (Sandbox Code Playgroud)

程序崩溃并报告KeyError,因为I2Cx不存在(它应该是I2C).

但如果我这样做:

try:
    connection = manager.connect("I2Cx")
except Exception, e:
    print e
Run Code Online (Sandbox Code Playgroud)

它没有为e打印任何东西.我希望能够打印抛出的异常.如果我尝试使用除零操作来执行相同操作,则会在两种情况下都正确捕获并报告.我在这里错过了什么?

python try-catch except

32
推荐指数
3
解决办法
12万
查看次数

从源文件中查找函数调用的行号

我正试图找到一种方法来找出调用函数的文件和行号.该函数位于库文件中,该文件由我的脚本提供.

文件1:

$source file2
$warn_me "Error: You didn't do something"
Run Code Online (Sandbox Code Playgroud)

文件2:

$function warn_me() {
$  message=????
$  echo ${message}
$}
Run Code Online (Sandbox Code Playgroud)

期望的输出: $:file1:第2行:错误:你没有做任何事情

函数调用已经在很多文件中多次出现,所以我试图找到一种方法来做到这一点而不改变它.

以前warn_me函数是在每个使用它的文件中定义的,并且这样做是这样的:

$local message="$BASH_SOURCE:(""${BASH_LINENO}): ""$*"
Run Code Online (Sandbox Code Playgroud)

bash scripting logging

14
推荐指数
3
解决办法
5971
查看次数

Python:停止等待用户输入的线程

当用户按下返回键时,我试图让我的脚本触发用户输入.然后主程序将检查txUpdated标志并使用此输入.

我有一个在python中运行的线程,它只是等待用户输入:

class InputThread(threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
    def run(self):
        global screenLock
        global txUpdated
        global txMessage
        global endFlag
        lock = threading.Lock()

        print "Starting " + self.name
        while not endFlag:
            txMessage = raw_input()
            if (txMessage == ""):
                screenLock = 1
                txMessage = raw_input("Enter Tx String: ")
                screenLock = 0

                with lock:
                    txUpdated = 1

        print "Exiting " + self.name
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何在没有接收用户输入的情况下结束此线程.即使我的主程序设置了endFlag,线程也不会结束,直到用户再输入一个输入.

有没有人对如何做到这一点有任何建议?

python multithreading

7
推荐指数
1
解决办法
1209
查看次数

解析命令和命令选项的bash变量

输入变量包含:

key1-key2-key3_command
Run Code Online (Sandbox Code Playgroud)

输出需要是:

command -k key1 -k key2 -k key3
Run Code Online (Sandbox Code Playgroud)

警告:键数可以从1到3不等.

我已经计算了破折号的数量,并使用if语句为每个键创建一个布尔指示符(即key1 = 1,unset key2).然后,${parameter:+word}如果设置了该键的标志,我将使用类似的东西来添加密钥.它开始变得有点凌乱,所以我想我会在这里询问实现这一目标的最佳方法是什么.

variables bash shell

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