Python If 语句没有被执行,尽管为真

Python If statement not being exectuted allthough true

我正在编写一些代码,它调用 API 来获取最新的比特币块哈希值。我将哈希值转换为十进制,然后希望获取前两位数字并将它们添加到列表中,前提是它们足够小。我添加了一个 if else 语句,您可以看到它是正确的,但它从未执行过,我不知道为什么。我对 python 比较陌生,所以请放轻松。

from __future__ import print_function
import blocktrail, time, csv, sys
class Bit():
    def __init__(self, key, secret, net, retry_fail=1, update=10,max_fail=10):
        self.hash_list = []
        self.seen = set()
        self.key = "x"
        self.secret = "x"
        self.net = "BTC"
        self.key = key
        self.retry_fail = retry_fail
        self.update = update
        self.max_fails = max_fail

def connect(self):
    return blocktrail.APIClient(api_key="x", api_secret="x", network="BTC", testnet=False)
    address = client.address('x')

def run(self):
    while True:
        if not self.max_fails:
            break
        try:
            client = self.connect()
            latest_block = client.block_latest()

        except blocktrail.exceptions.MissingEndpoint as e:
            self.max_fails -= 1
            print("Error: {}\n sleeping for {} second(s) before retrying".format(e.msg, self.retry_fail))
            time.sleep(self.retry_fail)
            continue
        hashc = latest_block['hash']

        hashcdec = int(hashc, 16)
        strhashcdec = str(hashcdec)
        hashcdecn = strhashcdec[0:2]

        print(hashcdec)

        while True:
            if hashcdecn < 100:
                self.hash_list.append(hashcdecn)
                self.seen.add(hashcdecn)
                print(self.hash_list)

            else:
                print(hashcdecn)
                print("number is too big")
                sys.exit()


        else:
            time.sleep(self.update)

Bit("key","secret","net").run()

您正在比较一个 字符串 和一个整数:

strhashcdec = str(hashcdec)
hashcdecn = strhashcdec[0:2]

# ....

if hashcdecn < 100:

整数总是排在 Python 2 中的字符串之前,所以无论 hashcdecn 的值是什么,它总是测试为 大于 整数。首先将您的数字转换回整数:

if int(hashcdecn) < 100:

或者更好的是,首先不要使用字符串:

hashcdec = int(hashc, 16)
hashcdecn = hashcdc % 100

请注意,任一数字 总是 小于 100,因为您在这里只获取了 2 位数字。