小编Chi*_*iel的帖子

我可以告诉 mypy 表达式不会返回可选值吗?

我有以下代码:

def extract_table_date(bucket_path: str) -> str:
    event_date = re.search(r"date=([^/]+)", bucket_path)
    return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)

mypy 在最后一行抛出错误:

“Optional[Match[str]]”的“None”项没有属性“group”

我想我可以通过为 分配一个类型来解决这个问题event_date,我可以:

from typing import Match

def extract_table_date(bucket_path: str) -> str:
    event_date: Match = re.search(r"date=([^/]+)", bucket_path)
    return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)

但 mypy 现在在函数的第一行抛出另一个错误:

赋值中的类型不兼容(表达式的类型为“Optional[Match[Any]]”,变量的类型为“Match[Any]”)

我真的不知道如何通知 mypy 结果不是可选的,但尽管如此,我还是遵循了可选类型和 None 类型的建议,添加了断言:

from typing import Match

def extract_table_date(bucket_path: str) -> str:
    assert bucket_path is not None
    event_date: Match = re.search(r"date=([^/]+)", bucket_path)
    return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)

但 mypy 仍然引发相同的错误。

我尝试通过更改定义的类型来修复event_date

from typing import Match, …
Run Code Online (Sandbox Code Playgroud)

python mypy python-typing

12
推荐指数
1
解决办法
9280
查看次数

从 None 引发 KeyError(key)

我收到一条错误消息,但不知道如何继续,错误消息显示在下面。我已经下载了它运行所需的所有工具,但密钥似乎有问题。我已经正确输入了它们,但是为了保持我的帐户的私密性,我已隐藏帐户用户名和密码。提前致谢

C:\Users\User\Downloads\real-time-intrinio-python-master\real-time-intrinio-python-master> python realtime.py AAPL 
Using Ticker: AAPL 
Traceback (most recent call last):
  File "realtime.py", line 18, in <module>
     r=requests.get(auth_url, headers={"Authorization": "Basic %s" % base64.b64encode(os.environ['myUsername'] + ":" + os.environ['myPassword'])}) 
  File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
     raise KeyError(key) from None 
KeyError: 'myUsername'
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码,第 18 行是“r=requests.get(auth_url, headers...”

import websocket
import _thread
import time
import requests
import base64
import json
import sys
import os
from requests.auth import HTTPBasicAuth

try:
    print ("Using Ticker: " + str(sys.argv[1]))
except:
    print ("Please include ticker as first argument") …
Run Code Online (Sandbox Code Playgroud)

python environment-variables keyerror

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

从 Python 列表向 PySpark DataFrame 添加新列

我有一个清单:

dates = [2017, 2018, 2018, 2018, 2019, 2019, 2019, 2020, 2020, 2020]
Run Code Online (Sandbox Code Playgroud)

我尝试将其添加到的数据帧长度相同(没有问题)。

我试过:

df = df.withColumn("YEARS", dates)
Error: Column needs to be col
Run Code Online (Sandbox Code Playgroud)

我也试过:

df = df.withColumn("YEARS", f.lit(dates))
Run Code Online (Sandbox Code Playgroud)

但这也行不通。

我看到了这个问题:如何在 Spark DataFrame 中添加一个常量列?

但是对于这种情况没有任何用处。

更新:预期结果是:

df_columns...   | dates_from_list
---------------------------------
original_df_data| 2017
original_df_data| 2018
original_df_data| 2018
original_df_data| 2018
original_df_data| 2019
original_df_data| 2019
original_df_data| 2019
original_df_data| 2020
original_df_data| 2020
original_df_data| 2020
Run Code Online (Sandbox Code Playgroud)

python apache-spark apache-spark-sql pyspark

4
推荐指数
1
解决办法
1230
查看次数

AWS-CDK:跨账户资源访问和资源参考

Secrets Manager我在 Account-1 中有一个秘密键值对us-east-1。此秘密使用客户管理的 KMS 密钥进行加密 - 我们称之为KMS-Account-1。所有这些都是通过控制台创建的。

现在我们转向CDK. 我们已经将cdk.pipelines.CodePipeline其部署Lambda到多个阶段/环境 - 所以从第一个到{ Account-2, us-east-1 }然后到{ Account-3, eu-west-1 }等等。这已经完成了。

us-east-1 SecretsManager上述所有阶段/环境中的 lambda 代码现在都需要更改为通过客户端获取Account-1 中存在的秘密键值对secretsmanager。该代码可能应如下所示 ( python):

client = boto3.session.Session().client(
    service_name = 'secretsmanager',
    region_name = 'us-east-1'
)
resp = client.get_secret_value(
    SecretId='arn:aws:secretsmanager:us-east-1:<ACCOUNT-1>:secret:name/of/the/secret'
)
secret = json.loads(resp['SecretString'])
Run Code Online (Sandbox Code Playgroud)

各个帐户和区域(即环境)中的所有 lambda 表达式都将具有与上述完全相同的代码,因为需要从us-east-1.

  1. 首先,我希望这在概念上是可能的。是对的吗?
  2. 接下来我如何更改cdk代码以促进这一点?代码管道中的代码部署如何获得导入此自定义kms密钥的权限,并SecretManager' secret通过 cdk 管道创建的 lambda 为跨帐户访问应用正确的权限?

有人可以指点一下吗?

aws-lambda amazon-kms aws-codepipeline aws-secrets-manager aws-cdk

3
推荐指数
1
解决办法
6503
查看次数