TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”

Posted

技术标签:

【中文标题】TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”【英文标题】:TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' while using Python 3.7 【发布时间】:2020-08-25 02:16:15 【问题描述】:

我正在尝试运行下面的简单 sn-p

port = int(os.getenv('PORT'))
print("Starting app on port %d" % port)

我可以理解 PORT 是字符串,但我需要转换为 int。为什么我收到错误

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

【问题讨论】:

您很可能忘记了export PORT。因此环境中没有PORT,因此它返回None 此应用是否有合理的默认端口?然后os.getenv('PORT', default_port) 就可以了。 【参考方案1】:

您没有名为 PORT 的环境变量。

os.getenv('PORT') -> 返回None -> 尝试将其转换为 int 时抛出异常

在运行脚本之前,在终端中通过以下方式创建环境变量:

export PORT=1234

或者,您可以提供一个默认端口,以防它未定义为您机器上的环境变量:

DEFAULT_PORT = 1234
port = int(os.getenv('PORT',DEFAULT_PORT))
print("Starting app on port %d" % port)

【讨论】:

【参考方案2】:

感谢您发表评论并提供解决方案。实际上,我的本地系统中没有分配端口,这就是它的原因。苏都说得对。

【讨论】:

以上是关于TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“DataFrame”

Django TypeError int() 参数必须是字符串或数字,而不是 'QueryDict'

Python 2 - TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“列表”

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”

Django 保存到 DB:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是“元组”

Paypal - 捕获订单 - 类型错误:strtolower():参数 #1 ($string) 必须是字符串类型,给定 int