如果跳过了函数中的语句,尽管条件已满足

时间:2016-02-06 01:36:27

标签: python-3.x

我正在制作一英里到公里/公里到英里的转换器,并且在运行时转换器会跳过.navbar-default .navbar-nav > li + li:before { content: ""; display: inline-block; vertical-align: middle; border-left: 1px solid #ffffff; height: 2.5em; } 语句,即使条件似乎已满足,而是执行if语句。 / p>

以下是代码:

else

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

学习使用调试器。 pdb是一个简单的控制台调试器,但有很多GUI更容易使用。

首先,在脚本中启动调试器。

C:\>py -m pdb test.py
> c:\test.py(1)<module>()
-> """Converts mi to km."""

n执行一行而不进入通话。我们将前进到第一个输入行:

(Pdb) n
> c:\test.py(2)<module>()
-> print("Welcome to the converter!")
(Pdb) n
Welcome to the converter!
> c:\test.py(3)<module>()
-> miorkm = input("Km to mi, or mi to km: ").lower

执行此行将提示miorkm

(Pdb) n
Km to mi, or mi to km: km
> c:\test.py(4)<module>()
-> val = input("How many Km or Mi: ")

检查刚刚输入的值:

(Pdb) miorkm
<built-in method lower of str object at 0x0000000002B65E68>

那不是"km"!您已将str.lower方法分配给变量。请使用.lower()调用该方法。

但如果您没有注意到这一点,请继续:

(Pdb) n
How many Km or Mi: 10
> c:\test.py(7)<module>()
-> def converter(inpu2):
(Pdb) n
> c:\test.py(15)<module>()
-> print(converter(miorkm))

我们不希望n执行整行。我们希望s进入转换器函数:

(Pdb) s
--Call--
> c:\test.py(7)converter()
-> def converter(inpu2):

现在我们处于converter()功能。寻找问题...

(Pdb) s
> c:\test.py(9)converter()
-> output = 0
(Pdb) s
> c:\test.py(10)converter()
-> if miorkm == "km":
(Pdb) s
> c:\test.py(13)converter()
-> output = int(val) * 1.609

这就错了! miorkm应该是"km"。检查一下:

(Pdb) miorkm
<built-in method lower of str object at 0x0000000002B65E68>

找到问题的更快方法是注意您始终转到else:语句。将代码编辑为import pdb,然后在if pdb.set_trace()之前设置断点:

import pdb
"""Converts mi to km."""
print("Welcome to the converter!")
miorkm = input("Km to mi, or mi to km: ").lower
val = input("How many Km or Mi: ")


def converter(inpu2):
    """Converts the value."""
    output = 0
    pdb.set_trace()
    if miorkm == "km":
        output = int(val) * 0.621
    else:
        output = int(val) * 1.609
    return output
print(converter(miorkm))

输出:

Welcome to the converter!
Km to mi, or mi to km: km
How many Km or Mi: 10
> c:\users\metolone\desktop\test.py(12)converter()
-> if miorkm == "km":

点击断点后,检查miorkm的值:     (Pdb)miorkm     

最后一种方法......最简单的方法。在print

之前添加if
print('miorkm =',miorkm)
if(...)

输出:

Welcome to the converter!
Km to mi, or mi to km: km
How many Km or Mi: 10
miorkm = <built-in method lower of str object at 0x000000000226B1B8>
16.09

答案 1 :(得分:0)

.lower应为.lower()。它返回了一个函数!= 'km'